如果条件,评估OR'd

Tob*_*oby 2 c evaluation if-statement conditional-statements

我的if声明在其正文中有一个声明,但条件由几个OR表达式组成.

在执行期间,如果OR'd条件中的第一个表达式为真,那么第二个表达式是否仍会被评估?

即表达式是否更好,或者每个表达式形成一个条件,以便每个表达式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();
Run Code Online (Sandbox Code Playgroud)

Gui*_*ido 5

不,如果OR(AND)的左侧评估为true(false),则不评估右侧.它被称为短路,是C的一个众所周知的特征.

你可以检查一下

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

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

int main () {
    if(f() || g())
      printf("hey\n");
}
Run Code Online (Sandbox Code Playgroud)

这会打印出来

 f!
 hey
Run Code Online (Sandbox Code Playgroud)