在我的 atexit() 注册函数中,我想获取退出状态(即传递给 exit(3) 的参数或 main() 返回的值)。
有没有一种可移植的方法来实现这个目标?是否有任何 GNU libc 特定的方法可以做到这一点,例如一个全局变量可以保存该值供我参考?
有没有一种可移植的方法来实现这个目标?是否有任何 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 中。
exit
周围加上括号 - 这样可以确保宏不会尝试调用自身,但允许宏调用同名函数。我最近才学到这个技巧,但它可以避免使用类似于#define EXIT(x) exit(last_exit = x)
这样明显的 hack。全大写只是丑陋的。 - Chris Lutz(x)
周围加上额外的括号。 - caf