C: существует ли "ленивая оценка" при использовании оператора &&, как в С++?

Я хотел бы знать, выглядит ли это правильно:

while((next !=NULL) && (strcmp(next->name, some_string) < 0) {
    //some process
}

Я имею в виду, если следующий NULL, то вторая часть выражения не будет когда-либо проверена компилятором? Я слышал, что в С++ это дело (но я даже не уверен в этом).

Может кто-нибудь подтвердить, что я не получу странных ошибок для некоторых компиляторов с этим?

Ответы

Ответ 1

Да && закорочен, и вы используете его правильно.
Если next - NULL, сравнение строк никогда не произойдет.

Ответ 2

Да, в С++ короткое замыкание and и or доступны операторы.

Здесь задан вопрос в C-faq по этому вопросу.

Ответ 3

Это определенно случай как в C, так и в С++.

Ответ 4

Это будет работать с ленивой оценкой (второй оператор не оценивается, если первый оценивается как "ложный" ), если ваш компилятор не является нестандартным, его нельзя даже назвать компилятором C. Миллионы строк кода в поле полагаются на это поведение, поэтому вы можете думать, что это поведение просто гарантировано.