我知道逻辑运算符做短路检查。也就是说,如果存在类似于A && B && C的语句,那么如果A为false,则不计算BC但在函数调用BC的情况下也是这样吗?
例如,此代码中的return语句:

bool areIdentical(struct node * root1, struct node *root2)
{
    /* base cases */
    if(root1 == NULL && root2 == NULL)
        return true;

    if(root1 == NULL || root2 == NULL)
        return false;

    /* Check if the data of both roots is same and data of left and right
       subtrees are also same */
    return (root1->data == root2->data   &&               //I am talking about this statement
            areIdentical(root1->left, root2->left) &&
            areIdentical(root1->right, root2->right) );
}

最佳答案

是的,如果root1->data == root2->datafalse,则不调用函数。
简单的检查就是:

#include <unistd.h>
#include <stdlib.h>

int main(void)
{
  write(1, "z", 1);
  if ((1 == 0) && write(1, "a", 1) && write(1, "b", 1))
  {
    write(1, "c", 1);
  }
  write(1, "d", 1);
  return (EXIT_SUCCESS);
}

关于c - 即使参数是函数调用,C也会使用短路评估吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19446465/

10-12 16:08