您的位置:首页 > 其它

终止处理程序的调用

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个终止处理函数,并调用,查看调用过程
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: