例如:
if(pos == -1 || character_array[pos] == 0) {
}
如果pos为-1,我可以指望这个永远不会崩溃吗?
与第一个条件失败的AND语句相同。
答案 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)