Получение статуса выхода из функции, зарегистрированной в atexit ()

В моей зарегистрированной функции atexit () я хотел бы получить статус выхода (либо аргумент exit (3), либо возвращаемый main ()).

Есть ли какой-нибудь переносной способ сделать это? Есть ли какой-либо GNU libc конкретный способ сделать это, например, глобальный холдинг, значение которого я могу ссылаться?

Вот взломать:

// hack.c int last_exit; // hack.h extern int last_exit; #define exit(x) (exit)(last_exit = (x)) 

Не будет работать для return , но, эй, это портативно!

На более удобном для пользователя примечании вы можете захотеть написать какую-либо форму обертки, чтобы сделать что-то подобное этому для вас. Взлом вокруг того, как GCC реализует exit() звучит как кошмар для обслуживания. Лучше написать несколько вспомогательных функций, которые выходят за вас, и, может быть, даже маскировать их макросами, если вы занимаетесь такими вещами. С макросом вы даже можете заменить return вызовы, если вы всегда вызываете return с круглыми скобками. Хотя это звучит как еще более кошмар для обслуживания.

Вы можете использовать on_exit . Это устарело, и это не Posix, но, по крайней мере, он находится в glibc.