[C言語]小記q=(++j)+(++j)+(++j)の値
5612 ワード
コンパイラによっては、生産されるコードが異なり、結果も異なります.
コードは次のとおりです.
環境:win 7
コンパイラ:GCC
IDE:vc++6.0 /DEV-C++
結果:q=22
環境:win 7
コンパイラ:GCC
IDE: VC++ 2008
実行結果:24
コードは次のとおりです.
1 #include <stdio.h>
2 void main()
3 {
4 int j = 5;
5 int q;
6 q =(++j)+(++j)+(++j);
7 }
環境:win 7
コンパイラ:GCC
IDE:vc++6.0 /DEV-C++
結果:q=22
1 6: q =(++j)+(++j)+(++j);
2 00401036 mov eax,dword ptr [ebp-8] J=5 eax
3 00401039 add eax,1 eax 1,eax=6
4 0040103C mov dword ptr [ebp-8],eax j ,j= 6
5 0040103F mov ecx,dword ptr [ebp-8] J=6 ecx
6 00401042 add ecx,1 ecx+1,j=6
7 00401045 mov dword ptr [ebp-8],ecx ecx J ,J=7
8 00401048 mov edx,dword ptr [ebp-8] J=7 edx=7
9 0040104B add edx,dword ptr [ebp-8] edx +j j=7,edx=7+7
10 0040104E mov eax,dword ptr [ebp-8] j=7Move eax
11 00401051 add eax,1 eax 1, eax=8
12 00401054 mov dword ptr [ebp-8],eax eax move j=8
13 00401057 add edx,dword ptr [ebp-8] edx = edx+j = 14+8
14 0040105A mov dword ptr [ebp-0Ch],edx edx move j = 22
環境:win 7
コンパイラ:GCC
IDE: VC++ 2008
実行結果:24
1 q =(++j)+(++j)+(++j);
2 003A1815 mov eax,dword ptr [j] //eax = 5,j = 5
3 003A1818 add eax,1 //eax = 6
4 003A181B mov dword ptr [j],eax j = 6
5 003A181E mov ecx,dword ptr [j] ecx = 6
6 003A1821 add ecx,1 ecx = 7
7 003A1824 mov dword ptr [j],ecx j = 7
8 003A1827 mov edx,dword ptr [j] edx = 7
9 003A182A add edx,1 edx = 8
10 003A182D mov dword ptr [j],edx j = 8
11 003A1830 mov eax,dword ptr [j] eax = 8
12 003A1833 add eax,dword ptr [j] eax = 16
13 003A1836 add eax,dword ptr [j] eax = 24
14 003A1839 mov dword ptr [q],eax