C语言main()主函数执行完毕后是否会再执行一段代码
生活随笔
收集整理的這篇文章主要介紹了
C语言main()主函数执行完毕后是否会再执行一段代码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C語言main()主函數(shù)執(zhí)行完畢后是否會再執(zhí)行一段代碼
分享到:main主函數(shù)是所有程序必須具備的函數(shù),是C/C++人員一接觸代碼就知道的函數(shù),那么這個問題會難倒很多人,尤其是平常不注意思考,不懂得問為什么的程序員,
這個問題的答案是:main() 函數(shù)結(jié)束后可以執(zhí)行一些代碼,進行清理工作。
具體請看下面的解析。
先來看一段代碼: 復制純文本復制
這里最關(guān)鍵的是使用了 atexit() 函數(shù),講 atexit() 函數(shù)之前先講一下 exit() 函數(shù)。
exit()函數(shù)用于在程序運行的過程中隨時結(jié)束程序,其原型為:
? ? void exit(int state);
exit的參數(shù)state是返回給操作系統(tǒng)或當前程序的調(diào)用程序,返回0表示程序正常結(jié)束,非0表示程序非正常結(jié)束。main函數(shù)結(jié)束時也會隱式地調(diào)用exit()函數(shù)。exit()函數(shù)運行時首先會執(zhí)行由atexit()函數(shù)登記的函數(shù),然后會做一些自身的清理工作,同時刷新所有輸出流、關(guān)閉所有打開的流并且關(guān)閉通過標準I/O函數(shù)tmpfile()創(chuàng)建的臨時文件。?
atexit() 用于注冊終止函數(shù)(即main執(zhí)行結(jié)束后調(diào)用的函數(shù)),其原型為:
? ? int atexit(void (*function)(void));
很多時候我們需要在程序退出的時候做一些諸如釋放資源的操作,但程序退出的方式有很多種,比如main()函數(shù)運行結(jié)束、在程序的某個地方用exit()結(jié)束程序、用戶通過Ctrl+C或Ctrl+break操作來終止程序等等,因此需要有一種與程序退出方式無關(guān)的方法來進行程序退出時的必要處理。方法就是用atexit()函數(shù)來注冊程序正常終止時要被調(diào)用的函數(shù)。
atexit()函數(shù)的參數(shù)是一個函數(shù)指針,函數(shù)指針指向一個沒有參數(shù)也沒有返回值的函數(shù)。
在一個程序中最多可以用atexit()注冊32個處理函數(shù),這些處理函數(shù)的調(diào)用順序與其注冊的順序相反,也即最先注冊的最后調(diào)用,最后注冊的最先調(diào)用。同一個函數(shù)如若登記多次,則也會被調(diào)用多次。
正如上面程序中所示,這些函數(shù)都是在main結(jié)束以后才被調(diào)用的。atexit()只是注冊他們,使得他們在main結(jié)束以后被調(diào)用,看名字就可以看出來。
總結(jié)
以上是生活随笔為你收集整理的C语言main()主函数执行完毕后是否会再执行一段代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图结构练习——最小生成树
- 下一篇: html上传文件