如果第一个条件通过,OR中的第二个条件是否会被执行?

时间:2011-07-27 06:44:40

标签: c if-statement crash operators conditional

例如:

if(pos == -1 || character_array[pos] == 0) {

}

如果pos为-1,我可以指望这个永远不会崩溃吗?

与第一个条件失败的AND语句相同。

3 个答案:

答案 0 :(得分:4)

C支持short-circuit evaluation与逻辑||&&运算符,因此在您的情况下,它应该按照您的描述工作,即不会崩溃。

答案 1 :(得分:2)

这是特定于语言的,但如果||的第一部分为真,则大多数语言都会忽略其余的语句。

同样,如果&&的一部分为假,大多数语言都会忽略语句的其余部分。

如果想要要执行的所有内容,请改用单|&运算符。

答案 2 :(得分:2)

是的,你可以指望这一点。 C标准的相关部分是6.5.13:

  

与按位二进制&运算符不同,&&运算符可以保证   从左到右的评价;之后有一个序列点   评估第一个操作数。如果第一个操作数比较相等   到0,不评估第二个操作数。

和6.5.14:

  

与按位|运算符不同,||运算符可以保证   从左到右的评价;之后有一个序列点   评估第一个操作数。如果第一个操作数比较不相等   到0,不评估第二个操作数。

例如,以下是惯用的C:

if (foo && foo->bar > 10)