И / ИЛИ Цепи в С - PullRequest
       33

И / ИЛИ Цепи в С

2 голосов
/ 09 июня 2009

Я в значительной степени уверен в этом, но просто на всякий случай:

Гарантирует ли стандарт C, что цепочки AND (A && B && ...) будут оцениваться слева направо, и эта оценка остановится, как только появится 0?

Тот же вопрос для ИЛИ. (Как только появится 1)

Могу ли я рассчитывать на это для других языков в стиле C?

Безопасен ли этот код:

if (somePtr!=NULL && somePtr->someMember==123)
{
     ...
}

Ответы [ 4 ]

10 голосов
/ 09 июня 2009

Да, это гарантировано для C, C ++ и C #. То же самое касается Delphi с включенной «оценкой короткого замыкания».

Это поведение, на которое опирается множество строк кода.

3 голосов
/ 09 июня 2009

Да, он стандартизирован как C, так и C ++.

0 голосов
/ 09 июня 2009

Да, это так.

Я видел людей, которые думали, что это неясно, и заменили && на эту форму:

if (a)
if (b)
if (c)
if (d) {
}

Лично я думаю, что это некрасиво.

0 голосов
/ 09 июня 2009

Да, ваши предположения о порядке операций в C верны, и фрагмент кода будет работать так, как задумано. Я бы взял другие языки "С-стиля" в каждом конкретном случае.

...