Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中,缺少“之间的链接”;“主要流程结束”;至;调用在atexit注册的任何函数;_C_Process_Main_Atexit - Fatal编程技术网

在C中,缺少“之间的链接”;“主要流程结束”;至;调用在atexit注册的任何函数;

在C中,缺少“之间的链接”;“主要流程结束”;至;调用在atexit注册的任何函数;,c,process,main,atexit,C,Process,Main,Atexit,在C语言中,当主进程结束时——它如何知道调用在atexit()注册的任何函数 我理解atexit()的工作原理,但我不理解“主进程结束”和“调用任何注册到atexit()的函数”之间的通信,我有点多余 谢谢 在C中,main()函数实际上是由其他函数调用的,该函数内置于运行时中。在main()函数结束后,此函数将执行更多的清理操作。其中之一是调用已在atexit()中注册的任何函数。此函数实际上存储了某种类型的函数指针静态列表,运行时将在main()之后调用这些指针。在C中,main()函数实际

在C语言中,当主进程结束时——它如何知道调用在
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))