Как всегда, этот вопрос может быть решен со ссылкой на спецификацию C (N1256).7.20.4.3 Дает это определение для exit()
:
3. Сначала вызываются все функции, зарегистрированные функцией atexit
, в обратном порядке их регистрации, кромечто функция вызывается после любых ранее зарегистрированных функций, которые уже были вызваны во время ее регистрации.Если во время вызова любой такой функции будет выполнен вызов функции longjmp
, которая прервет вызов зарегистрированной функции, поведение не определено.
4. Далеевсе открытые потоки с неписанными буферизованными данными сбрасываются, все открытые потоки закрываются и все файлы, созданные функцией tmpfile
, удаляются.
5. Наконец, управление возвращаетсясреда хоста.Если значение статуса равно нулю или EXIT_SUCCESS,
, возвращается определяемая реализацией форма успешного завершения статуса.Если значение статуса равно EXIT_FAILURE,
, возвращается определяемая реализацией форма неудачного завершения статуса.В противном случае возвращаемый статус определяется реализацией.
Или на английском языке:
Первый вызов всех зарегистрированных atexit
функций.Далее очистите все неписанные буферизованные данные.Далее закройте открытые потоки.Наконец, верните статус выхода и управление в ОС.