按照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; }
結論:終止處理函數註冊一次,調用一次,其調用順序和其註冊順序徹底相反。