Получение статуса выхода изнутри функции, зарегистрированной с помощью atexit () - PullRequest
6 голосов
/ 04 февраля 2010

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

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

Ответы [ 2 ]

3 голосов
/ 04 февраля 2010

Вот хак:

// hack.c
int last_exit;

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

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

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

0 голосов
/ 16 декабря 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...