现在的位置: 首页 > 综合 > 正文

VC6/VS2003编译器优化造成的bug

2018年02月08日 ⁄ 综合 ⁄ 共 3528字 ⁄ 字号 评论关闭

 昨天在CSDN上面看到这样一贴,居然爆料VC6/VS2003有一个严重的bug,于是自己也仔细研究一番:

 

1、原贴地址:

VC6/VS2003编译器有严重bug !

 

http://topic.csdn.net/u/20091126/10/81713034-7301-4183-93c0-654d75645582.html

 

2、出错代码:

 

3、原因分析

当我在使用IDE环境选择Release生成后,确实发现有上述问题

于是我修改他的代码,狼兄弟建议我先看看此时i的十进制数值与十六进制数值:

 

在命令行编译参数中添加/Fa即可得到汇编代码(当前目录中Hello.asm):

生成的汇编代码(Release)

 

查看Release生成后在汇编代码:

 

可以惊奇的发现i <0会被优化成0x800B5514 <0x00407D14,于是乎让我想起前面编译器优化参数的三个选项,打开IDE的编译选项:

Release

 

 

Debug、Relase、NO

 

3、解决办法:

这是由于编译器参数优化造成的,具体影响结果的参数是/O2(代码速度最快),如果使用/Od(不使用优化)则不会出现上述结果,测试如下图:

测试

 

在此,十分感谢寂寞的狼、iceboy等友友的耐心的指导与无私的帮助!

 

4、相关文章:

深入探究VC —— 编译器cl.exe(1)

深入探究VC —— 编译器cl.exe(2)

 

抱歉!评论已关闭.