[C言語]小記q=(++j)+(++j)+(++j)の値

5612 ワード

コンパイラによっては、生産されるコードが異なり、結果も異なります.
 
コードは次のとおりです.
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