关于(++x)+(++x)+(++x)在VC中,经反汇编后
0040102F
mov
eax,dword ptr [ebp-4]
//dword ptr [ebp-4]存放的是变量x
00401032
add
eax,1
00401035
mov
dword ptr [ebp-4],eax
00401038
mov
ecx,dword ptr [ebp-4]
0040103B
add
ecx,1
0040103E
mov
dword ptr [ebp-4],ecx
00401041
mov
edx,dword ptr [ebp-4]
00401044
add
edx,dword ptr [ebp-4]
00401047
mov
eax,dword ptr [ebp-4]
0040104A
add
eax,1
0040104D
mov
dword ptr [ebp-4],eax
00401050
add
edx,dword ptr [ebp-4]
00401053
mov
dword ptr [ebp-4],edx
所以转换成c大致是:
x=3;
x=x+1;
x=x+1;
x=x+x+(x+1);
至于TC和VC结果不同,是由于编译原理不同,对一些表达式处理不一样。估计是这样。
[[it] 本帖最后由 Kid_X 于 2008-6-1 22:42 编辑 [/it]]