C 2018 5.1.2.3 6 говорит:
Минимальные требования к соответствующей реализации:
Доступ к изменчивым объектам оценивается строго по правилам абстрактной машины.
При завершении программы все данные, записанные в файлы, должны быть идентичны результату, который произойдет при выполнении программы в соответствии с абстрактной семантикой.
Динамика ввода и вывода интерактивных устройств должна осуществляться в соответствии с 7.21.3. Цель этих требований заключается в том, чтобы небуферизованный или линейно-буферизованный вывод появлялся как можно быстрее, чтобы гарантировать, что сообщения-подсказки действительно появляются до того, как программа ожидает ввода.
Это наблюдаемое поведение программы.
На первый взгляд, это не включает статус выхода из программы.
Что касается exit(status)
, 7.22.4.4 5 говорит:
Наконец, управление возвращается в среду хоста. Если значение
status
равно нулю илиEXIT_SUCCESS
, возвращается определяемая реализацией форма успешного завершения статуса. Если значениемstatus
являетсяEXIT_FAILURE
, возвращается определяемая реализацией форма неудачного завершения статуса. В противном случае возвращаемый статус определяется реализацией.
Стандарт не говорит нам, что это является частью наблюдаемого поведения. Конечно, не имеет смысла, чтобы это поведение exit
было описанием чисто абстрактной машины Cs; возвращение значения в окружающую среду не имеет смысла, если оно не наблюдается в окружающей среде. Поэтому мой вопрос не столько в том, является ли наблюдаемый статус выхода, сколько в том, является ли это дефектом в определении стандартов наблюдаемого поведения в стандартах C. Или в стандарте есть где-то еще текст, который применяется?