Ответ 1
Да &&
закорочен, и вы используете его правильно.
Если next
- NULL
, сравнение строк никогда не произойдет.
Я хотел бы знать, выглядит ли это правильно:
while((next !=NULL) && (strcmp(next->name, some_string) < 0) {
//some process
}
Я имею в виду, если следующий NULL
, то вторая часть выражения не будет когда-либо проверена компилятором? Я слышал, что в С++ это дело (но я даже не уверен в этом).
Может кто-нибудь подтвердить, что я не получу странных ошибок для некоторых компиляторов с этим?
Да &&
закорочен, и вы используете его правильно.
Если next
- NULL
, сравнение строк никогда не произойдет.
Да, в С++ короткое замыкание and
и or
доступны операторы.
Здесь задан вопрос в C-faq по этому вопросу.
Это определенно случай как в C, так и в С++.
Это будет работать с ленивой оценкой (второй оператор не оценивается, если первый оценивается как "ложный" ), если ваш компилятор не является нестандартным, его нельзя даже назвать компилятором C. Миллионы строк кода в поле полагаются на это поведение, поэтому вы можете думать, что это поведение просто гарантировано.