在C中,當主進程結束時 - 如何調用任何註冊爲atexit()
的函數?在C中,缺少「主進程結束」與「調用任何使用atexit註冊的函數」之間的鏈接
我明白atexit()
是如何工作的,但我不明白「主進程結束」和「調用任何註冊爲atexit()
的函數」之間的通信「我有點多餘。
謝謝!
在C中,當主進程結束時 - 如何調用任何註冊爲atexit()
的函數?在C中,缺少「主進程結束」與「調用任何使用atexit註冊的函數」之間的鏈接
我明白atexit()
是如何工作的,但我不明白「主進程結束」和「調用任何註冊爲atexit()
的函數」之間的通信「我有點多餘。
謝謝!
從the C standard [PDF鏈接](5.1.2.2.3):
從初始調用
main
函數的返回是相當於調用exit
功能與由main
功能返回的值它的論點;達到終止主函數}
返回值0
。
它是exit
函數負責調用與atexit
註冊功能(見7.20.4.3在一切exit
做的說明,標準)。
在C中,main()
函數實際上是由其他函數調用的,該函數內置於運行時。這個函數在main()
函數結束後,還有幾件事需要清理。其中之一是調用已經在atexit()
註冊的任何功能。這個函數實際上存儲了某種類型的函數指針的靜態列表,這些列表將在main()
之後由運行時調用。
該文件通常稱爲crt0.o;它基本上做了設置工作,然後執行'exit(main(argc,argv));' – 2009-11-26 06:04:52
是的,我正在逐步執行退出代碼,並且注意到它對atExit()有明確的調用。 有沒有另外一種方式來通過玩棧(不覆蓋返回地址),以便它在Main結束時進入myExit()函數。 謝謝! – Setzer 2009-11-25 19:29:26
更可能的是編譯器發出的代碼:初始化全局變量;然後調用main;然後用main的返回值調用exit。 – 2009-11-25 19:42:36