【问题标题】:Will the 2nd conditional in an OR ever be executed if the 1st conditional passes?如果第一个条件通过,OR 中的第二个条件会被执行吗?
【发布时间】:2011-07-27 06:44:40
【问题描述】:

例如:

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

}

如果 pos 是 -1,我可以指望它永远不会崩溃吗?

第一个条件失败的 AND 语句也是如此。

【问题讨论】:

标签: c if-statement crash operators conditional


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    是的,您可以信赖这一点。 C标准的相关部分是6.5.13:

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

    和 6.5.14:

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

    例如,以下是惯用的C:

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

    【讨论】:

      【解决方案3】:

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

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

      如果您想要执行所有操作,请改用|& 运算符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-28
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2013-09-14
        • 2022-01-20
        • 2018-04-18
        • 1970-01-01
        相关资源
        最近更新 更多