C: есть ли "ленивая оценка" при использовании оператора &&, как в C ++? - PullRequest
13 голосов
/ 18 октября 2010

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

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

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

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

Ответы [ 4 ]

14 голосов
/ 18 октября 2010

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

8 голосов
/ 18 октября 2010

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

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

7 голосов
/ 18 октября 2010

Это определенно так и в C и C ++.

2 голосов
/ 18 октября 2010

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

...