在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做的说明,标准)。

+0

是的,我正在逐步执行退出代码,并且注意到它对atExit()有明确的调用。 有没有另外一种方式来通过玩栈(不覆盖返回地址),以便它在Main结束时进入myExit()函数。 谢谢! – Setzer 2009-11-25 19:29:26

+0

更可能的是编译器发出的代码:初始化全局变量;然后调用main;然后用main的返回值调用exit。 – 2009-11-25 19:42:36

在C中,main()函数实际上是由其他函数调用的,该函数内置于运行时。这个函数在main()函数结束后,还有几件事需要清理。其中之一是调用已经在atexit()注册的任何功能。这个函数实际上存储了某种类型的函数指针的静态列表,这些列表将在main()之后由运行时调用。

+1

该文件通常称为crt0.o;它基本上做了设置工作,然后执行'exit(main(argc,argv));' – 2009-11-26 06:04:52