Использует ли 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) );
}