昨天在CSDN上面看到这样一贴,居然爆料VC6/VS2003有一个严重的bug,于是自己也仔细研究一番:
1、原贴地址:
http://topic.csdn.net/u/20091126/10/81713034-7301-4183-93c0-654d75645582.html
2、出错代码:
3、原因分析
当我在使用IDE环境选择Release生成后,确实发现有上述问题
于是我修改他的代码,狼兄弟建议我先看看此时i的十进制数值与十六进制数值:
在命令行编译参数中添加/Fa即可得到汇编代码(当前目录中Hello.asm):
查看Release生成后在汇编代码:
可以惊奇的发现i <0会被优化成0x800B5514 <0x00407D14,于是乎让我想起前面编译器优化参数的三个选项,打开IDE的编译选项:
3、解决办法:
这是由于编译器参数优化造成的,具体影响结果的参数是/O2(代码速度最快),如果使用/Od(不使用优化)则不会出现上述结果,测试如下图:
在此,十分感谢寂寞的狼、iceboy等友友的耐心的指导与无私的帮助!
4、相关文章: