atexit

2puT發表於2016-07-18


按照ISO C的規定,一個程式可以登記至少32個函式,這些函式將由exit自動呼叫。atexit()註冊的函式型別應為不接受任何引數的void函式。
外文名
atexit
標頭檔案
#include<stdlib.h>
功 能
註冊終止函式
用 法
void atexit

Atexit簡介

編輯
函式名: atexit
標頭檔案:#include<stdlib.h>
功 能: 註冊終止函式(即main執行結束後呼叫的函式)
用 法: void atexit(void (*func)(void));
注意:exit呼叫這些註冊函式的順序與它們 登記時候的順序相反。同一個函式如若登記多次,則也會被呼叫多次。

程式例

編輯
#include <stdio.h>
#include <stdlib.h>
void exit_fn1(void)
{
printf("Exit function #1 called\n");
}
void exit_fn2(void)
{
printf("Exit function #2 called\n");
}
int main(void)
{
/* post exit function #1 */
atexit(exit_fn1);
/* post exit function #2 */
atexit(exit_fn2);
return 0;
}
輸出:
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 <stdlib.h>
void exit (int status);
void _Exit (int status);
#include <unistd.h>
void _exit (status);
其中呼叫 _exit,_Exit 都不會呼叫終止程式
異常終止也不會。

與解構函式的呼叫順序

編輯
在atexit(f)呼叫之前被靜態分配的物件的解構函式將在f()的呼叫之後被呼叫。在一個atexit(f)呼叫之後建立的這種物件的解構函式將在f的呼叫之前被呼叫。引自《The C++ Programming Language》(Bjarne Stroustrup)