天天看點

《C和C++程式員面試秘笈》——1.12 C++中main函數執行完後還執行其他語句嗎

本節書摘來自異步社群出版社《c和c++程式員面試秘笈》一書中的第1章,第1.12節,作者: 董山海,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

c和c++程式員面試秘笈

考點: atexit()函數的使用

出現頻率:

【解析】

很多時候,我們需要在程式退出的時候做一些諸如釋放資源的操作,但程式退出的方式有很多種,例如main()函數運作結束,在程式的某個地方用exit()結束程式,使用者通過ctrl+c等操作發信号來終止程式,等等,是以需要有一種與程式退出方式無關的方法來進行程式退出時的必要處理。方法就是用atexit()函數來注冊程式正常終止時要被調用的函數。

atexit()函數的參數是一個函數指針,函數指針指向一個沒有參數也沒有傳回值的函數。atexit()的函數原型是:

 <code> int atexit (void (*)(void));</code>

在一個程式中最多可以用atexit()注冊32個處理函數,這些處理函數的調用順序與其注冊的順序相反,即最先注冊的最後調用,最後注冊的最先調用。請看下面的程式代碼。

main exit…

calling fn1()…

calling fn2()…<code>`</code>

在這裡,fn2()與fn1()在main()函數結束後被依次調用,并且它們被調用的順序與它們在main()函數被注冊的順序相反。

【答案】

可以用 atexit()函數來注冊程式正常終止時要被調用的函數,并且在 main()函數結束時,調用這些函數的順序與注冊它們的順序相反

繼續閱讀