两者之间有什么区别吗?
int on_exit(void (*function)(int , void *), void *arg);
和
int atexit(void (*function)(void));
除了on_exit使用的函数获得退出状态的事实?
也就是说,如果我不关心退出状态,是否有任何理由使用其中一个?
编辑:许多答案警告反对,on_exit
因为它是非标准的.如果我正在开发一个供公司内部使用的应用程序并保证在特定配置上运行,我应该担心这个吗?
你应该atexit()
尽可能使用. on_exit()
是非标准的,不太常见.例如,它在OS X上不可用.
Kernel.org - on_exit()
:
此功能来自SunOS 4,但也存在于libc4,libc5和glibc中.它不再出现在Solaris(SunOS 5)中.避免使用此功能,而是使用标准的atexit(3).
根据这个链接我发现,似乎有一些差异. on_exit
将允许您传入一个在on_exit
调用函数时传入函数的参数...这可能会让您设置一些指针,以便在退出时进行一些清理工作.
此外,它似乎on_exit
是一个SunOS特定的功能,可能在所有平台上都不兼容......所以你可能想要坚持使用atexit,尽管它更具限制性.