#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
编译器已经将错误的值写入了文件,因此会得到不可思议的结果
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
编译器已经将错误的值写入了文件,因此会得到不可思议的结果