Использует ли C оценку короткого замыкания, даже если аргументы являются вызовами функций?

Я знаю, что логические операторы выполняют проверку на короткое замыкание. То есть, если есть утверждение типаA && B && Cтогда, еслиA ложно,B а такжеC не оцениваются. Но верно ли это и в тех случаях, когдаB а такжеC такое вызовы функций?

Например, оператор возврата в этом коде:

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) );  
}

Ответы на вопрос(3)

Ваш ответ на вопрос