Это совсем не неопределенно. Одна из точек последовательности, перечисленных в Приложении C к C99, является концом полного выражения, одним из которых является выражение в операторе возврата.
Поскольку вы возвращаете 42, сразу за этим оператором return
стоит точка последовательности.
Для полноты здесь перечислены точки последовательности C99, а соответствующая выделена жирным шрифтом:
Ниже приведены точки последовательности, описанные в 5.1.2.3:
.
- Вызов функции после оценки аргументов (6.5.2.2).
- Конец первого операнда следующих операторов: логическое И & & (6.5.13); логическое ИЛИ || (6.5.14); условный? (6.5.15); запятая, (6.5.17).
- Конец полного объявления: объявления (6.7.5);
- Конец полного выражения: инициализатор (6.7.8); выражение в выражении выражения (6.8.3); управляющее выражение оператора выбора (if или switch) (6.8.4); управляющее выражение оператора while или do (6.8.5); каждое из выражений оператора for (6.8.5.3); выражение в операторе возврата (6.8.6.4) .
- Непосредственно перед возвратом библиотечной функции (7.1.4).
- После действий, связанных с преобразованием каждой отформатированной функции ввода / вывода
спецификатор (7.19.6, 7.24.2).
- Непосредственно перед и сразу после каждого вызова функции сравнения, и
также между любым вызовом функции сравнения и любым движением объектов
переданы в качестве аргументов для этого вызова (7.20.5).