终止处理程序的调用
2016-06-19 10:13
295 查看
按照ISO C的规定,一个进程可以登记至少32个函数,这些函数称为终止处理函数(exit handler),这些函数将由exit自动调用。atexit()注册的函数类型应为不接受任何参数的void函数。
1、atexit
函数名: atexit
头文件:#include<stdlib.h>
功 能: 注册终止函数(即main执行结束后调用的函数)
用 法: int atexit(void (*func)(void));
注意:exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。
2、c程序的启动和终止
3、程序验证
说明:注册10个终止处理函数,并调用,查看调用过程
本文出自 “momo就是辣么萌” 博客,请务必保留此出处http://momo462.blog.51cto.com/10138434/1790730
1、atexit
函数名: atexit
头文件:#include<stdlib.h>
功 能: 注册终止函数(即main执行结束后调用的函数)
用 法: int atexit(void (*func)(void));
注意:exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。
2、c程序的启动和终止
3、程序验证
说明:注册10个终止处理函数,并调用,查看调用过程
#include <stdio.h> #include <stdlib.h> void fun1() { printf("1\n"); } void fun2() { printf("2\n"); } void fun3() { printf("3\n"); } void fun4() { printf("4\n"); } void fun5() { printf("5\n"); } void fun6() { printf("6\n"); } void fun7() { printf("7\n"); } void fun8() { printf("8\n"); } void fun9() { printf("9\n"); } void fun10() { printf("10\n"); } typedef void(*func)(); func a[10]={fun1,fun2,fun3,fun4,fun5,fun6,fun7,fun8,fun9,fun10}; int main() { int i=0; for(;i<10;i++) { if(atexit(a[i])!=0) { printf("error fun%d\n",i); } } printf("main is done\n"); return 0; }结论:终止处理函数注册一次,调用一次,其调用顺序和其注册顺序完全相反。
本文出自 “momo就是辣么萌” 博客,请务必保留此出处http://momo462.blog.51cto.com/10138434/1790730
相关文章推荐
- LeetCode 242. Valid Anagram
- Database Initialization Strategies in Code-First:
- DataBinding框架初体验
- 以受限方式启动数据库
- 组合模式(Composite)—分公司与总部
- 附加作业
- CSS3变形之3D变形
- 简单几招破解Windows管理员密码
- L2-010. 排座位(并查集水题)
- 【Ionic实战】一个和AngularJS的跨平台(iOS,Android) APP框架
- 附加题
- 根据传入的数据绘制圆环,以及以绘画形式自定义图片为圆形
- [caffe]深度学习之图像分类模型AlexNet解读
- Linux 系统应用编程——网络编程(利用TCP/IP 模型分析数据传输过程)
- 沈阳航空软件工程附加
- [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
- 174. Dungeon Game
- 增量更新:bsdiff工具的安装和使用
- 上班之前的“踩点”--一个程序员的成长史(9)
- 【Ionic实战】自动升级Android APP