在C中,缺少“主进程结束”与“调用任何使用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()
之后由运行时调用。
+1
该文件通常称为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