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

 昨天在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)

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪宁宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值