c - OR'd if 条件的评估

标签 c if-statement conditional-statements evaluation

我有一个 if 语句,其主体中有一个语句,但条件由多个 OR 表达式组成。

在执行过程中,如果 OR 条件中的第一个表达式为真,第二个表达式是否仍会被计算?

即是对表达式进行“或”运算,还是让每个表达式形成 else 的单个条件更好,其中每个 else 的主体是相同的?

例如

if ((!x && y && z) || (x && !y && !z) || (x != y) {
    foo();

//vs

if (!x && y && z)
    foo();
else if (x && !y && !z)
    foo();
else if (x != y)
    foo();

最佳答案

否,如果 OR (AND) 的左侧计算结果为真(假),则不计算右侧。这称为短路,是 C 的一个众所周知的特性。

您可以通过以下方式查看

int f () {
    printf("f!\n");
    return 1;
}

int g () {
    printf("g!\n");
    return 0;
}

int main () {
    if(f() || g())
      printf("hey\n");
}

这将打印

 f!
 hey

关于c - OR'd if 条件的评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658073/

相关文章:

c - Linux kernel 3.x - 了解在内核空间获取mac地址的方式

c - 函数的 undefined reference 错误

c# - 清理病态嵌套 "if { } else { if { } else { if { ... } } }"

c# - 检查属性的嵌套/层次结构是否为空?

java - 谁能告诉我如何使用 C 或 Java 中的图形来解决这个问题?

c++ - 在 R 值中使用 volatile 两次

c - 在 C 程序中,计算 NxM 数组中数字 0 到 9 的出现次数。我的计算数字的数量而不是单个数字计数?

java - 如何检查循环java中的条件?

javascript - 浓缩 if, else 条件相似的 JS

python - Pandas 中的行满足某些条件,将 dos 条件的值分配给一个单元格