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