Говорит ли стандарт что-нибудь о порядке вычисления подвыражений в случае точек последовательности?
Порядок оценки хорошо определен в случае условных операторов &&
, а также ||
, и это является причиной коротких замыканий.
Это явно указано в стандарте c99.
Ссылка: Стандарт c99
Приложение J: J.1 Неуказанное поведение
1 Не указана следующая информация:
.....
Порядок, в котором оцениваются подвыражения, и порядок, в котором побочные эффекты
имеют место, за исключением случаев, указанных для функции-вызова (), &&, ||,?: и запятой
операторы (6,5).
.....
Далее,
6.5.14 Логический оператор ИЛИ
4) В отличие от побитового | оператор, || оператор гарантирует оценку слева направо; после оценки первого операнда есть точка последовательности. Если первый операнд сравнивается с неравным 0, второй операнд не оценивается.
А также для логического И:
6.5.13 Логический оператор И
В отличие от побитового двоичного оператора &, оператор && гарантирует вычисление слева направо;
если вычисляется второй операнд, между оценками
первый и второй операнды. Если первый операнд сравнивается равным 0, второй
операнд не оценивается.