为什么评估第二个if条件,即使条件甚至不满足?

时间:2014-10-05 17:30:10

标签: c

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那么第二个条件是如何评估的?

2 个答案:

答案 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