在C中,缺少“之间的链接”;“主要流程结束”;至;调用在atexit注册的任何函数;
在C语言中,当主进程结束时——它如何知道调用在在C中,缺少“之间的链接”;“主要流程结束”;至;调用在atexit注册的任何函数;,c,process,main,atexit,C,Process,Main,Atexit,在C语言中,当主进程结束时——它如何知道调用在atexit()注册的任何函数 我理解atexit()的工作原理,但我不理解“主进程结束”和“调用任何注册到atexit()的函数”之间的通信,我有点多余 谢谢 在C中,main()函数实际上是由其他函数调用的,该函数内置于运行时中。在main()函数结束后,此函数将执行更多的清理操作。其中之一是调用已在atexit()中注册的任何函数。此函数实际上存储了某种类型的函数指针静态列表,运行时将在main()之后调用这些指针。在C中,main()函数实际
atexit()注册的任何函数
我理解atexit()
的工作原理,但我不理解“主进程结束”和“调用任何注册到atexit()的函数”之间的通信,我有点多余
谢谢 在C中,main()
函数实际上是由其他函数调用的,该函数内置于运行时中。在main()
函数结束后,此函数将执行更多的清理操作。其中之一是调用已在atexit()
中注册的任何函数。此函数实际上存储了某种类型的函数指针静态列表,运行时将在main()
之后调用这些指针。在C中,main()
函数实际上是由运行时内置的其他函数调用的。在main()
函数结束后,此函数将执行更多的清理操作。其中之一是调用已在atexit()
中注册的任何函数。此函数实际上存储某种类型的函数指针静态列表,运行时将在[PDF链接](5.1.2.2.3)中的main()
从初始调用到main
函数的返回相当于调用exit
函数,将main
函数返回的值作为其参数;到达终止主函数的}
返回值0
exit
函数负责调用在atexit
注册的函数(参见标准中的7.20.4.3,了解exit
所做的一切操作的说明)。来自[PDF链接](5.1.2.2.3):
从初始调用到main
函数的返回相当于调用exit
函数,将main
函数返回的值作为其参数;到达终止主函数的}
返回值0
exit
函数负责调用在atexit
中注册的函数(参见标准中的7.20.4.3,了解exit
所做的所有事情的描述)。是的,我正在逐步执行exit代码,并注意到它有一个对atexit()的显式调用。还有另一种方法可以做到这一点,即在不重写返回地址的情况下处理堆栈,以便它在Main结束时进入myExit()函数。谢谢编译器更可能发出以下代码:初始化全局变量;然后调用main;然后使用main中的返回值调用exit。是的,我正在单步执行exit代码,并注意到它显式调用了atExit()。还有另一种方法可以做到这一点,即在不重写返回地址的情况下处理堆栈,以便它在Main结束时进入myExit()函数。谢谢编译器更可能发出以下代码:初始化全局变量;然后调用main;然后使用main的返回值调用exit;它基本上完成了设置工作,然后执行exit(main(argc,argv))代码>该文件通常称为crt0.o;它基本上完成了设置工作,然后执行exit(main(argc,argv))代码>