Я хочу выполнить условие multi condition, как показано ниже.
Head* head;
If ((head->next!=NULL)&&(head->next->next!=NULL))
Порядок выполнения важен для работы вышеприведенного оператора без seg-сбоев.
Есть ли способ определить, как компилятор выполнит его во время компиляции.
Стандарт.
Вам гарантировано, что первое выражение будет оценено первым.
Кроме того, вам гарантируется, что, если первое оценивает значение false
, второе не будет оцениваться (посмотрите на короткое замыкание). Если этого не происходит, компилятор не соответствует требованиям.
&&
и ||
операторы проводят оценку слева направо и вводят точку последовательности, поэтому вам гарантируется полная оценка LHS и все побочные эффекты, применяемые до оценки RHS.
Порядок всегда слева направо. таким образом
(cond1) && (cond2)
всегда будет заканчиваться сначала тест cond1, и, если это правда, cond2.