终止处理程序的调用

按照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

wKiom1dl_y-yo7ilAAD-imge6V4208.jpg


三、程序验证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;
}

结论:终止处理函数注册一次,调用一次,其调用顺序和其注册顺序彻底相反。