根據不同的編譯器,生產的代碼不一樣,導致的結果也會不一樣。
代碼如下:
#include <stdio.h> j = q =(++j)+(++j)+(++ }
環境:win7
編譯器:GCC
IDE:vc++6.0 /DEV-C++
結果:q = 22
: q =(++j)+(++j)+(++ mov eax,dword ptr [ebp-] 移動J= add eax, 在寄存器eax值上加1,eax= 0040103C mov dword ptr [ebp-],eax 把寄存器的值移動到變量j上去,j= 0040103F mov ecx,dword ptr [ebp-] 移動J= add ecx, 在寄存器上ecx+,j= mov dword ptr [ebp-],ecx 把寄存器ecx上的值移到J上去,J= mov edx,dword ptr [ebp-] 把J=7移動到寄存器edx= 0040104B add edx,dword ptr [ebp-] edx值+j 此時j=,edx=+ 0040104E mov eax,dword ptr [ebp-] 把j= add eax, eax再加1,此時寄存器eax= mov dword ptr [ebp-],eax 把此時的eax的值move給 j= add edx,dword ptr [ebp-] edx值= edx+j = + 0040105A mov dword ptr [ebp-0Ch],edx edx值 move給 j =
環境:win7
編譯器:GCC
IDE: VC++ 2008
運行結果:24
q =(++j)+(++j)+(++ 003A1818 add eax, //eax = 6 003A1821 add ecx, ecx = 7 003A182A add edx, edx = 8 003A1839 mov dword ptr [q],eax