程式結束後呼叫的函式 註冊終止函式

2021-06-20 05:46:34 字數 2005 閱讀 4578

相關函式:_exit, atexit, exit

註冊終止函式:

1,on_exit

標頭檔案:#include

定義函式:int on_exit(void (* function) (int void*), void *arg);

函式說明:on_exit()用來設定乙個程式正常結束前呼叫的函式. 當程式通過呼叫exit()或從main 中返回時, 引數function 所指定的函式會先被呼叫, 然後才真正由exit()結束程式. 引數arg 指標會傳給引數function函式, 詳細情況請見範例.

返回值:如果執行成功則返回0, 否則返回-1, 失敗原因存於errno 中.

範例#include

void my_exit(int status, void *arg)

main()

執行:

before exit()! exit (1234) arg = test 

2,_onexit()

//以下理解如有錯誤請指正,謝謝!

//          author: sky  

//          date:  2011.10.4  

//          content: _onexit   

///  

#include 

#include 

usingnamespacestd;  

intfunc1();  

//_onexit 使用方法   函式必須是 帶有int型別返回值的無引數函式

//_onexit 包含在cstdlib中  原始是c語言中的庫函式

intmain(intargc,char* argv)  

intfunc1()  

3,atexit

atexit()函式

函式名: atexit

標頭檔案:#include

功 能: 註冊終止函式(即main執行結束後呼叫的函式)

用 法: int atexit(void (*func)(void));

注意:按照iso c的規定,乙個程序可以登記多達32個函式,這些函式將由exit自動呼叫。atexit()註冊的函式型別應為不接受任何引數的void函式,exit呼叫這些註冊函式的順序與它們 登記時候的順序相反。同乙個函式如若登記多次,則也會被呼叫多次。

程式例:

#include #include void exit_fn1(void)

void exit_fn2(void)

int main(void)

輸出:

exit function #2 called

exit function #1 called

4,程序的終止方式:

有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 都不會呼叫終止程式

異常終止也不會。

產生巢狀函式先呼叫的後結束的原因

public class testdemo5 public static voidm1 public static voidm2 輸出結果 main開始 m1開始 m2開始 m2結束 m1結束 main結束 先執行主函式,輸出main函式開始,緊接著在主函式裡呼叫了m1 方法,進入m1方法體,執行s...

atexit()函式呼叫註冊的順序

按照iso c的規定,乙個程序可以登記至少32個函式,這些函式將由exit自動呼叫。乙個程序可以登記若干個函式,這些函式由 exit自 動呼叫,這些函式被稱為終止處理函式,atexit 函式可以登記這些 函式。exit 呼叫終止處理函式的順 序和atexit 登記的順序相反,如果乙個函式被多次登記,...

C語言中的程式終止函式

在c語言的標準庫中提供了一些與正常或者不正常的程式終止有關的函式,下面分別對其進行簡單介紹。1 c和指標,p298,342 2 c程式語言現代方法 第2版 p489 3 atexit函式和exit函式的理解 1 abort abort 函式用於不正常地終止乙個正在執行的程式。函式原型如下 void ...