Вопрос
Я в целом положительно отношусь к этому, но на всякий случай:
Гарантирует ли стандарт C, что цепочки AND (A && B && ...) будут оцениваться слева направо и что вычисление прекратится, как только появится 0?
Тот же вопрос по ОР.(Как только будет 1)
Могу ли я рассчитывать на это для других языков C-стиля?
Безопасен ли этот код:
if (somePtr!=NULL && somePtr->someMember==123)
{
...
}
Решение
Да, это гарантировано для C, C++ и C#.То же самое касается Delphi с включенной «оценкой короткого замыкания».
Это поведение, на которое на данный момент полагаются многие строки кода.
Другие советы
Да, он стандартизирован как C, так и C++.
Да, ваши предположения о порядке операций в C верны, и фрагмент кода будет работать так, как задумано.Другие языки «C-стиля» я бы рассматривал в каждом конкретном случае.
Да, это так.
Я видел людей, которые думали, что это неясно, и заменяли && на эту форму:
if (a)
if (b)
if (c)
if (d) {
}
Лично я считаю, что это как-то некрасиво.