atexit()函数
2017-11-08 10:50
127 查看
我们有时候需要在函数退出的时候做一些诸如释放资源的操作,但程序退出的方式有多种,例如main()函数运行结束后退出,或者在程序某处调用exit()退出等等,因此需要有一种与程序退出方式无关的方法来进行程序退出时的一些必要处理。那么,有一个问题,在main()函数执行完之后还能执行其他语句吗?答案是肯定的。atexit()函数就可以用来注册在程序终止时被调用的函数。
atexit()函数的参数是一个函数指针,指向一个没有参数也没有返回值的函数(即被注册的退出时的处理函数),atexit()原型如下:
int atexit(void (* func) void);
在一个程序中,最多可以用atexit()注册32个处理函数,这些函数的调用顺序与其注册顺序是相反的,即最先注册的最后被调用,最后注册的最先被调用。一个简单的例子如下:
#include <stdio.h>
#include <stdlib.h>
void function_1(void);
void function_2(void);
void function_3(void);
int main(void)
{
atexit(function_1);
atexit(function_2);
atexit(function_3);
printf("Main exit....\n");
return 0;
}
void function_1()
{
printf("Calling function_1.....\n");
}
void function_2()
{
printf("Calling function_2.....\n");
}
void function_3()
{
printf("Calling function_3.....\n");
}
上面的例子中,main()函数调用了atexit()依次注册了函数function_1(),function_2()和function_3(),运行该程序,得到的结果如下:
可以看到,main()函数执行完后,function_3()、function_2()和function_1()依次被调用,调用顺序与注册顺序相反。
atexit()函数的参数是一个函数指针,指向一个没有参数也没有返回值的函数(即被注册的退出时的处理函数),atexit()原型如下:
int atexit(void (* func) void);
在一个程序中,最多可以用atexit()注册32个处理函数,这些函数的调用顺序与其注册顺序是相反的,即最先注册的最后被调用,最后注册的最先被调用。一个简单的例子如下:
#include <stdio.h>
#include <stdlib.h>
void function_1(void);
void function_2(void);
void function_3(void);
int main(void)
{
atexit(function_1);
atexit(function_2);
atexit(function_3);
printf("Main exit....\n");
return 0;
}
void function_1()
{
printf("Calling function_1.....\n");
}
void function_2()
{
printf("Calling function_2.....\n");
}
void function_3()
{
printf("Calling function_3.....\n");
}
上面的例子中,main()函数调用了atexit()依次注册了函数function_1(),function_2()和function_3(),运行该程序,得到的结果如下:
可以看到,main()函数执行完后,function_3()、function_2()和function_1()依次被调用,调用顺序与注册顺序相反。
相关文章推荐
- atexit()注册终止函数
- 进程管理之 atexit()函数
- Linux中atexit()在有多个自定义函数时对函数的调用顺序验证
- atexit 在函数正常退出时执行的函数注册
- 几个出错处理的函数abort、exit、atexit、strerror函数的使用方法
- VS2012配置Opengl以及“无法解析的外部符号 __imp____glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用”问题
- atexit()函数
- atexit函数简介
- Linux中exit()函数和atexit函数
- atexit函数基本应用
- error LNK2019: 无法解析的外部符号 __imp____glutCreateWindowWithExit@8,该符号在函数 _glutCreateWindow_ATEXIT_HA
- 【Linux】linux下atexit()函数的使用
- error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : error LNK2019: 无法解析的外部符号 ___gl
- 回收进程用户空间资源 exit()函数 _exit()函数 atexit()函数 on_exit()函数
- atexit函数用法
- 4000 atexit函数解析
- Linux中的file_struct、t命令以及atexit函数有关知识
- Linux下atexit函数以及权限位
- atexit()函数
- atexit函数的使用【学习笔记】