按照iso c的規定,乙個程序可以登記多達32個函式,這些函式將由exit自動呼叫.通常這32個函式被稱為終止處理程式,並呼叫atexit函式來登記這些函式,atexit()註冊的函式型別應為不接受任何引數的void函式,當程式通過呼叫exit()或從main 中返回時, 引數function 所指定的函式會先被呼叫, 然後才真正由exit()結束程式。
atexit函式簡介:
函式名: atexit
標頭檔案:#include
功 能: 註冊終止函式(即main執行結束後呼叫的函式)
返回值:成功返回0;失敗返回乙個非0值,並存在error中。
用 法: void atexit(void (*func)(void));
注意:exit呼叫這些註冊函式的順序與它們登記時候的順序相反。同乙個函式如若登記多次,則也會被呼叫多次。
程式例子:
#include
#include
void exit_fn1(void)
void exit_fn2(void)
int main(void)
輸出:exit function #2 called
exit function #1 called
程序的終止方式:
有8種方式使程序終止,其中前5種為正常終止,它們是
1:從 main 返回
2:呼叫 exit
3:呼叫 _exit 或 _exit
4:最後乙個執行緒從其啟動例程返回
5:最後乙個執行緒呼叫pthread_exit
異常終止有3種,它們是
6:呼叫 abort
7:接到乙個訊號並終止
8:最後乙個執行緒對取消請求做出響應
#include
void exit (int status);
void _exit (int status);
#include
void _exit (status);
其中呼叫 _exit,_exit 都不會呼叫終止程式
異常終止也不會。
與析構函式的呼叫順序:
在atexit(f)呼叫之前被靜態分配的物件的析構函式將在f()的呼叫之後被呼叫。在乙個atexit(f)呼叫之後建立的這種物件的析構函式將在f的呼叫之前被呼叫。
呼叫順序:在乙個程式中可以用atexit()註冊幾個處理函式(註冊次數依賴於你的編譯器),這些處理函式的呼叫順序與其註冊的順序相反,也即最先註冊的最後呼叫,最後註冊的最先呼叫。
atexit函式詳解
對c語言有所了解的人都知道main函式是整個程式的入口,但是其實不然,在核心中可以使用鏈結器來設定程式的開始地方。當核心使 個exec函式執 c程式時,在調 main函式之前先調 個特殊的啟動例程,可執 程式將此例程指定為程式的起始位址。啟動例程從核心獲取命令 引數和環境變數,然後為調 main函式...
atexit 函式呼叫
函式名 atexit 標頭檔案 include 功 能 註冊終止函式 即main執行結束後呼叫的函式 用 法 int atexit void func void 按照iso c的規定,乙個程序可以登記多達32個函式,這些函式將由exit自動呼叫。atexit 註冊的函式型別應為不接受任何引數的voi...
驗證atexit 函式
按照iso c的規定,乙個程序可以登記至少32個函式,這些函式將由exit自動呼叫。乙個程序可以登記若干個函式,這些函式由 exit自 動呼叫,這些函式被稱為終止處理函式,atexit 函式可以登記這些函式。exit 呼叫終止處理函式的順 序和atexit 登記的順序相反,如果乙個函式被多次登記,也...