Есть ли способ определить, каким образом компилятор выполняет несколько условий if, во время компиляции [duplicate]

0

Я хочу выполнить условие multi condition, как показано ниже.

Head* head;
If ((head->next!=NULL)&&(head->next->next!=NULL))

Порядок выполнения важен для работы вышеприведенного оператора без seg-сбоев.

Есть ли способ определить, как компилятор выполнит его во время компиляции.

Теги:

3 ответа

9

Стандарт.

Вам гарантировано, что первое выражение будет оценено первым.

Кроме того, вам гарантируется, что, если первое оценивает значение false, второе не будет оцениваться (посмотрите на короткое замыкание). Если этого не происходит, компилятор не соответствует требованиям.

1

&& и || операторы проводят оценку слева направо и вводят точку последовательности, поэтому вам гарантируется полная оценка LHS и все побочные эффекты, применяемые до оценки RHS.

1

Порядок всегда слева направо. таким образом

(cond1) && (cond2)

всегда будет заканчиваться сначала тест cond1, и, если это правда, cond2.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню