This question already has answers here:
Closed 5 years ago.
Why are these constructs using pre and post-increment undefined behavior?
(14个答案)
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那么第二个条件是如何计算的呢?

最佳答案

--a的值是a减去1之前的值。
此外,该表达式还具有改变a值的副作用。
比较的左边是a的值。。。但在应用副作用之前或之后a的值是多少?
C标准没有强制执行检查值和应用副作用的顺序;并且说,读取变量值并在没有中间序列点的情况下更改其值是未定义的行为。
基本上,程序中的每个;都有一个序列点(不是那么简单);表达式(a == --a)没有序列点。

关于c - 为什么即使条件不满足也要评估第二个if条件? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26205272/

10-11 22:45
查看更多