#include <stdio.h>
int main( void ){
int a = 4;
//a += a++;
//a += (++a);
++a += a++;
printf( "%d\n",a);
return 0;
}
这个应该有固定的结果. 汇编代码如下:
int a = 4;
0102310E mov dword ptr [a],4
//a += a++;
//a += (++a);
++a += a++;
01023115 mov eax,dword ptr [a]
01023118 add eax,1
0102311B mov dword ptr [a],eax
0102311E mov ecx,dword ptr [a]
01023121 add ecx,dword ptr [a]
01023124 mov dword ptr [a],ecx
01023127 mov edx,dword ptr [a]
0102312A add edx,1
0102312D mov dword ptr [a],edx
首先执行++a,此时a = 5,然后执行 a + a 并赋值给a,此时a = 5 + 5 = 10,结束后执行a++,所以输出11.
如果是(i++) + (i++) + (i++)这样的操作,是未定义的,不同的编译器可能会有不同的结果. vs 2008下,会首先自加三次,然后再相加.