int main()
{
int a=10;
if (a == a--)
printf("true1\t\n");
a=10;
if(a == --a)
{
printf("true2");
}
return 0;}
如同第二个条件a = 10和--a是9,即10!= 9那么第二个条件是如何评估的?
答案 0 :(得分:7)
--a
的值是a
减去1
的先前值。
此外,该表达式具有更改a
的值的副作用。
比较的左侧部分是a
的值......但是在应用副作用之前或之后它是a
的值吗?
C标准不强制检查值并应用副作用的顺序;并且说,读取变量的值并在没有插入序列点的情况下更改其值是未定义行为。
基本上,程序中的每个;
都有一个序列点(它不是那么简单);你的表达式(a == --a
)没有序列点。
答案 1 :(得分:-3)
我相信下一条规则在C中也有效,就像在Java中一样: --x的优先级高于x -
a=10;
printf(a--) // should be showing 10;
a=10;
printf(--a) //should be showing 9