C:OR运算符在返回行中?

时间:2018-09-18 08:00:11

标签: c function return return-value or-operator

||行中带有 OR 运算符(return)的某些代码中使用。有人可以解释那是什么吗?


这里看起来像这样:

int main()
{
    ...

    return (1 || 0);
}

但是实际上它是一个函数(返回1或0),而不是1和0:

int main()
{
    ...

    return (foo(x++, y) || foo(x, y++));
}

2 个答案:

答案 0 :(得分:2)

a || b如果a不为零,则与b的值无关,结果为1;如果a为0,而b为,则结果为1。非零,否则为0。

所以1 || 012 || 0也是如此。

请注意,如果b非零,则不会对a进行求值:因此,如果b是一个函数,则不会在这样的情况下调用它:案件。因此,在您的示例中,如果foo(x, y++)非零,则y++称为包括foo(x++, y)的求值。

请注意,a || b的类型是int,与参数的类型无关。 cf.类型为bool的C ++。

答案 1 :(得分:1)

逻辑或具有short circuit property。仅当LHS评估为false时,才评估RHS。

在这种情况下,由于操作数是函数调用,所以

  • 将进行LHS函数调用foo(x++, y)
  • 如果返回值为1(TRUTHY),则不会评估RHS,并且将返回值1
  • 如果返回值为0,则进行foo(x, y++)函数调用,并且返回值将基于函数调用的返回值。