为什么`i + = i ++`在C中为1,在C#中为0?

Why is `i += i++` 1 in C and 0 in C#?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

关于堆栈溢出有一个非常好的问题。

对于i=0,为什么(i+=i++)等于0?

但是当我在C中尝试相同的代码时,它给出了不同的结果:

1
2
3
int i = 0;          
i += i++;          // 1 in C and 0 in C#
printf("%d", i);

但以下内容:

1
2
i = i++ + i;       // 1 in C and 1 in C#
i += i++ + i;      // 1 in C

在C中,它评估++=+操作符,首先为每个fo指定tempVar,并对tempVars执行操作。C是如何实现它的?或者是不同的建筑?


C标准没有规定评估顺序。它留给编译器实现。