Стандарт C не накладывает особых ограничений на коды выхода, параграф о возвращаемом значении main
делегирует документацию о функции exit()
, которая в свою очередь гласит:
Если значение статуса равно нулю или EXIT_SUCCESS
, возвращается заданная реализацией форма успешного завершения статуса.Если значение состояния EXIT_FAILURE
, возвращается форма, определяемая реализацией завершения безуспешного состояния.В противном случае возвращаемый статус определяется реализацией.
, что, помимо рекомендаций EXIT_SUCCESS
/ EXIT_FAILURE
, в основном означает «делай, что хочешь».:)
Как сказано в одном комментарии, тот факт, что в системах POSIX фактически рассматриваются только младшие 8 битов кода выхода, является просто UNIXism, происходящим из того, как wait
syscall разработан (статус выхода должен быть упакован в младшие 8 битов возвращаемого значения wait
) и не имеет ничего общего со стандартом C.
Контрпример - Windows, где весьучитывается значение, переданное exit
/ return
(если оно не больше DWORD
1 , но я не думаю, что они когда-либо сделают int
большеDWORD
, было бы много кода).
1. Поскольку параметр GetExitCodeProcess
, зарезервированный для возврата этого значения, равен DWORD *
.