很多時候我們需要在程序退出的時候做一些諸如釋放資源的操作,但程序退出的方式有很多種,比如main()函數運行結束、在程序的某個地方用exit()結束程序、用戶通過Ctrl+C或Ctrl+break操作來終止程序等等,因此需要有一種與程序退出方式無關的方法來進行程序退出時的必要處理。方法就是用atexit()函數來注冊程序正常終止時要被調用的函數。
atexit()函數的參數是一個函數指針,函數指針指向一個沒有參數也沒有返回值的函數。
atexit()的函數原型是:
#include <cstdlib>
intatexit(void(*func)(void));
atexit()成功時返回零,失敗時返回非零。
在一個程序中至少可以用atexit()注冊32個處理函數(你至少可以32次,這依賴於你的編譯器),這些處理函數的調用順序與其注冊的順序相反,也即最先注冊的最后調用,最后注冊的最先調用。
這里需要糾正一下網上很多人的錯誤說法,他們說atexit()最多可以被調用32次,而實際上是atexit最少可以被調用32次。
函數說明:atexit()用來設置一個程序正常結束前調用的函數. 當程序通過調用exit()或從main 中返回時, 參數function 所指定的函數會先被調用, 然后才真正由exit()結束程序.
返回值:如果執行成功則返回0, 否則返回-1, 失敗原因存於errno 中.
范例
#include <stdlib.h>
void my_exit(void)
{
printf("before exit () !\n");
}
main()
{
atexit (my_exit);
exit(0);
}
執行:
before exit()!
轉自: http://www.51testing.com/html/38/225738-235458.html
http://c.biancheng.net/cpp/html/270.html
