当我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束、程序的某个地方使用exit()结束程序等等。我们需要些一种不受程序退出所影响的方法来进行程序退出时的必要操作。C语言中提供了atexit()函数来注册程序终止时要被调用的函数。
可以在msdn搜索atexit或者Linux中使用man atexit命令来查询atexit的相关信息
atexit简介:
atexit - register a function to be called at normal process termination
atexit()出处及其声明:
#include <stdlib.h>
int atexit(void (*function)(void));
注意:参数为函数指针
atexit简介:
atexit()用来设置一个程序正常结束前调用的函数. 当程序通过调用exit()或从main 中返回时, 参数function 所指定的函数会先被调用, 然后才真正由exit()结束程序.
也就是说,在一个程序中可以用atexit()注册几个处理函数(注册次数依赖于你的编译器),这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。
返回值:
成功返回0;失败返回一个非0值,并存在erron中。
下面通过一个例子来展示一下:
源代码:
执行结果:
现象:
程序先输出了第22行的printf()函数,然后执行fn2()函数,最后执行fn1()函数程序,然后退出。
原因:
程序在执行时,遇见atexit()函数后,就注册该处理函数,然后继续往下执行。于是就注册了两个处理函数fn1()和fn2()。然后执行第22行的printf()函数。
最后在程序即将退出时,逆序调用上面注册过的处理函数,也就是先调用fn2()函数,后调用fn1()函数,最后退出程序。