終止處理程序的調用

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

結論:終止處理函數註冊一次,調用一次,其調用順序和其註冊順序徹底相反。

相關文章
相關標籤/搜索