【发布时间】:2011-07-27 06:44:40
【问题描述】:
例如:
if(pos == -1 || character_array[pos] == 0) {
}
如果 pos 是 -1,我可以指望它永远不会崩溃吗?
第一个条件失败的 AND 语句也是如此。
【问题讨论】:
标签: c if-statement crash operators conditional
例如:
if(pos == -1 || character_array[pos] == 0) {
}
如果 pos 是 -1,我可以指望它永远不会崩溃吗?
第一个条件失败的 AND 语句也是如此。
【问题讨论】:
标签: c if-statement crash operators conditional
C 支持 short-circuit evaluation 与逻辑 || 和 && 运算符,因此在您的情况下,它应该按照您的描述工作,即不会崩溃。
【讨论】:
是的,您可以信赖这一点。 C标准的相关部分是6.5.13:
与按位二进制
&运算符不同,&&运算符保证 从左到右的评估;之后有一个序列点 评估第一个操作数。如果第一个操作数比较相等 到0,不计算第二个操作数。
和 6.5.14:
与按位
|运算符不同,||运算符保证 从左到右的评估;之后有一个序列点 评估第一个操作数。如果第一个操作数比较不相等 到0,不计算第二个操作数。
例如,以下是惯用的C:
if (foo && foo->bar > 10)
【讨论】:
这是特定于语言的,但如果 || 的第一部分为真,大多数语言将忽略该语句的其余部分。
同样,如果&& 的一部分为假,大多数语言都会忽略语句的其余部分。
如果您想要执行所有操作,请改用| 和& 运算符。
【讨论】: