#include<stdio.h> int main() { int x = 1, y = 0; printf("%d\n",x-->(x + y)); }

为什么devc显示是1,vs是0

不同编译器下自增和自减处理逻辑的不同

visual studio中的处理方式:

--在变量后面的时候,先处理其他算式,最后再计算--,所以最后等于0

这应该是编译器实现的差异。

我的环境运行,输出为1。我认为输出1是合理的。

这个问题跟i--和--i的区别有关,他们的赋值和求值的顺序不同。i--是先赋值再自减; --i是先自减再求值。

就本例来说,> 先计算左值,左值i--先赋值再自减,因此左值为1, 然后自减x的值变为0; 有值为(x+y) = 0。所以 1 > 0结果为True,因此输出为1。