while循环检查每个条件吗?

时间:2016-11-25 16:41:25

标签: c loops while-loop conditional-statements

假设我在C中有以下循环:while(x1&& x2)。 如果第一个条件为假(x1 == 0),那么while循环会检查第二个条件吗?

4 个答案:

答案 0 :(得分:3)

  

如果第一个条件为假(x1 == 0),那么while循环会检查第二个条件吗?

没有。它赢了。

它被称为short circuit evaluation

来自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