假设我在C中有以下循环:while(x1&& x2)。 如果第一个条件为假(x1 == 0),那么while循环会检查第二个条件吗?
答案 0 :(得分:3)
如果第一个条件为假(x1 == 0),那么while循环会检查第二个条件吗?
没有。它赢了。
来自C11, 6.5.13:
与按位二进制&操作员,&&运营商保证 从左到右的评价;如果评估第二个操作数,则有 第一个和第二个的评估之间的序列点 操作数。如果第一个操作数比较等于0,则第二个操作数 没有评估。
同样在cond1 || cond2
中,如果cond1
评估为 true ,那么cond2
将无法进行评估。请参阅:C11, 6.5.14:
与按位|不同运算符,||运营商保证 从左到右的评价;如果评估第二个操作数,则有 第一个和第二个的评估之间的序列点 操作数。如果第一个操作数比较不等于0,则第二个操作数 操作数未被评估。
答案 1 :(得分:1)
如果第一个条件的计算结果为false,则第二个条件由标准的而不是进行评估。
来自C standard的第6.5.13节:
4 与按位二进制
&
运算符不同,&&
运算符保证从左到右的评估;如果第二个操作数是 评估后,评估之间存在一个序列点 第一和第二个操作数。 如果是第一个操作数 比较等于0,不评估第二个操作数。
答案 2 :(得分:0)
不,如果第一个条件为假,它将直接停在那里
这样,如果要检查if (arrayLength < 10 && array[15] == 'c')
之类的内容,假设arrayLength是数组的长度,则可以避免分段错误等错误。
答案 3 :(得分:0)
C执行短路评估。如果x1
为false,则整个表达式都不可能为真,因此永远不会评估x2
。