/* * _atexit_run — размотать цепочку atexit-хендлеров (LIFO). * * Общее тело для двух входов: явного exit() и возврата из main (там его * зовёт crt0 через _atexit_hook). Отдельным модулем — чтобы программа, * не зарегистрировавшая ни одного хендлера, не получала этот код вовсе. * * Вершина сбрасывается ПЕРЕД вызовом каждого хендлера: если хендлер сам * позовёт exit(), цепочка не пойдёт по второму кругу. */ #include "_atexit.h" void _atexit_run(void) { while (_atexit_top > 0) { void (*fn)(void) = _atexit_stack[--_atexit_top]; if (fn) { fn(); } } }