В C отсутствует связь между «основным процессом заканчивается», чтобы «вызовать любые функции, зарегистрированные в Atexit».
Вопрос
В C, когда заканчивается основной процесс - как он знает, чтобы вызвать какие -либо функции, зарегистрированные в atexit()
?
Я понимаю, как atexit()
Работает, но я не понимаю общения между «окончанием основного процесса» и «вызовом любых функций, зарегистрированных в atexit()
"Я немного избыточно.
Спасибо!
Решение
Из Стандарт C. PDF ссылка] (5.1.2.2.3):
Возврат от первоначального вызова к
main
функция эквивалентна вызоваexit
функционировать со значением, возвращаемымmain
функционировать как его аргумент; достигая}
что завершает основную функцию возвращает значение0
.
Это обязанность exit
функция для вызова функций, зарегистрированных в atexit
(См. 7.20.4.3 в стандарте для описания всего, что exit
делает).
Другие советы
В c, main()
Функция на самом деле вызывается какой -то другой функцией, которая встроена во время выполнения. Эта функция, после main()
Функция заканчивается, делает еще несколько вещей, чтобы очистить. Одним из них является вызвать любые функции, которые были зарегистрированы в atexit()
. Анкет Эта функция фактически хранит какой -то статический список указателей функций, который будет вызван во время выполнения после main()
.