按照iso c的規定,乙個程序可以登記至少32個函式,這些函式將由exit自動呼叫。
乙個程序可以登記若干個函式,這些函式由
exit自
動呼叫,這些函式被稱為終止處理函式,
atexit
函式可以登記這些
函式。exit
呼叫終止處理函式的順
序和atexit
登記的順序相反,如果乙個函式被多次登記,也會被多次呼叫。
atexit函式是乙個特殊的函式,它是在正常程式退出時呼叫的函式,我們把他叫為登記函式(函式原型:
int atexit
(void (*)(void))
):
函式名:
atexit
標頭檔案:#include
功 能:
註冊終止函式
(即main執行結束後呼叫的函式)
用 法: void atexit(void (*func)(
void
));
注意:exit呼叫這些註冊函式的順序與它們 登記時候的順序相反。同乙個函式如若登記多次,則也會被呼叫多次。
然後我們通過編寫makefile實現編譯
然後我們執行**
我們可以根據上面的函式,進行對比看到:
在主函式中,是先列印輸出語句,再呼叫fun3函式,再呼叫fun2函式,最後呼叫fun1函式的,即
atexit函式的調
用順序是和登記順序相反的,當然,乙個函式被多次登記,也會被多次呼叫。
我們再來了解一下exit()函式
函式名: exit()
所在標頭檔案:stdlib.h
功 能: 關閉所有檔案,終止正在執行的程序。
exit(1)表示異常退出.這個1是返回給作業系統的。
exit(x)(x不為0)都表示異常退出
exit(0)表示正常退出
exit()的引數會被傳遞給一些作業系統,包括unix,linux,和ms dos,以供其他程式使用。
stdlib.h: void exit(int status);
參 數 : status //程式退出的返回值.
區分:
exit()和return的區別:
按照ansi c,在最初呼叫的main()中使用return和exit()的效果相同。
但要注意這裡所說的是「最初呼叫」。如果main()在乙個遞迴程式中,exit()仍然會終止程式;但return將控制權
移交給遞迴的前一級,直到最初的那一級,此時return才會終止程式。return和exit()的另乙個區別
在於,即使在
除main()之外的函式中呼叫exit(),它也將終止程式。
_exit()與exit的區別:
標頭檔案:
exit:#include
_exit:#include
_exit()函式:直接使程序停止執行,清除其使用的記憶體空間,並銷毀其在核心中的各種資料結構;
exit()函式則在這些基礎上作了一些包裝,在執行退出之前加了若干道工序。
exit()函式與_exit()函式最大的區別就在於 exit()函式在呼叫 exit系統呼叫之前要檢查檔案的開啟情況,把檔案緩
衝區中的內容寫回檔案。
atexit 函式呼叫
函式名 atexit 標頭檔案 include 功 能 註冊終止函式 即main執行結束後呼叫的函式 用 法 int atexit void func void 按照iso c的規定,乙個程序可以登記多達32個函式,這些函式將由exit自動呼叫。atexit 註冊的函式型別應為不接受任何引數的voi...
atexit 註冊終止函式
註冊終止函式 main執行結束後呼叫的函式 void atexit void func void 乙個程序可以登記多達32個函式,這些函式將由exit自動呼叫 驗證atexit函式呼叫註冊函式的順序 include h include h void fun1 void fun2 void fun3 ...
atexit 註冊終止函式和t許可權
1.atexit 函式 atexit 註冊終止函式,函式註冊的函式應為不接受任何引數的void函式,exit 呼叫函式的順序與函式註冊的順序正好相反。1 include 2 include3 void fun1 4 7 void fun2 8 11 void fun3 12 15 int main ...