VC编译器的问题

来源:互联网 发布:淘宝银色喷漆 编辑:程序博客网 时间:2024/05/11 03:52
 #include <stdio.h>
int main()
{
int i=1,m;
m=(++i)+(++i)+(++i);
printf("%d %d/n",m,i);
return 0;
}
编译以上代码后,你会惊奇的发现输出的m值竟然不是你所预料的

使用OD调试后可以发现
00401000 /$ 6A 05 push 5 ; /<%d> = 5
00401002 |. 6A 14 push 14 ; |<%d> = 14 (20.)
00401004 |. 68 F4204000 push 004020F4 ; |format = "%d %d",LF,""
00401009 |. FF15 A0204000 call dword ptr [<&MSVCR90.printf>] ; /printf
0040100F |. 83C4 0C add esp, 0C
00401012 |. 33C0 xor eax, eax
00401014 /. C3 retn

编译器已经将错误的值写入了文件,因此会得到不可思议的结果