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

2021-07-31 07:01:49 字數 2453 閱讀 5987

按照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 ...