按照ISO C的规定,一个进程能够登记至少32个函数,这些函数称为终止处理函数(exit handler),这些函数将由exit自动调用。atexit()注册的函数类型应为不接受任何参数的void函数。ide
一、atexit函数
函数名: atexitspa
头文件:#include<stdlib.h>blog
功 能: 注册终止函数(即main执行结束后调用的函数)进程
用 法: int atexit(void (*func)(void));get
注意:exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记屡次,则也会被调用屡次。it
二、c程序的启动和终止io
三、程序验证class
说明:注册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; }
结论:终止处理函数注册一次,调用一次,其调用顺序和其注册顺序彻底相反。