我知道什么是在C.短路评价&& ||短路评估操作者
a && b
a || b
(操作数B不是若a = 0检查)(操作数B未选中若a =非零)
但我被困在这个问题
int x = 0;
if (5 || 2 && ++x)
printf("%d", x);
这输出0
。
我的第一个想法去如下:
根据优先顺序表,优先为++
,&&
,||
(降序)
++x
:evaluated.x
变为12 && ++x
评估。两个操作数都被评估。||
被评估。
但根据这一点,1
应打印,不0
。
我的第二个想法,就如同:
5 || anything
anything
因为短路评价不计算,所以没有优先进场这里。