短路运算符如何决定如何解释该语句?

问题描述 投票:0回答:1

我刚刚了解了c中的短路运算符,如果可以从左侧语句推导出结果,则右侧语句不会运行。但是,如果有多个这些运算符,那么什么决定哪个语句属于哪个语句呢?比如下面的代码,如果根据运算符优先级&&高于||那左边的部分不是 (a+b)%d 而 d++||c++ 是另一部分吗?因为如果我运行程序并检查d和c的值,d的值不会增加,而c的值会增加,这意味着c++已经完成了?为什么会出现这种情况?


int main()
{
    int a=5,b=8,c=0,d=1;
    printf("%d\n",(a+b)%d&&d++||c++);
    printf("%d %d",c,d);
    return 0;
}
c short-circuit-evaluation
1个回答
0
投票

&&
确实比
||
具有更高的优先级,这意味着
&&
将首先被评估。

但是

(a+b)%d
的结果将为0。在这种情况下,
&&
的右操作数(
d++
)将不再被执行。

然后将评估

||
。左操作数的结果为
0
,这意味着
c++
(右操作数)也需要计算。这就是它增加的原因。

© www.soinside.com 2019 - 2024. All rights reserved.