(3)进程启动后,要执行一些初始化代码(如设置环境变量等),然后跳转到main执行。全局对象的构造也在main之前。
C语言没有构造函数问题,所以main差不多一定是第一个被调的函数了。
C++继承了这个说法,所以编译器会在mian里加上2个函数
int main()
{
__enter_main();//于此构造所有全局变量
//你的代码
__exit_main();//于此析构所有全局变量
}
当然,也可能封装成
int real_main()
{
__before_main();
main();
__after_main();
}
所以,在调用你写的main里面的第一行代码前,完全可能调用其它函数。
#include <iostream>
void fn1(void)
{
printf("next.\n");
}
void fn2(void)
{
printf("executed ");
}
void fn3(void)
{
printf("is ");
}
void fn4(void)
{
printf("This ");
}
int main(void)
{
//
// 注册需要在 main 函数结束后执行的函数.
// 请注意它们的注册顺序和执行顺序
// 在 main 函数结束后被调用,调用顺序与注册顺序相反。 先注册后执行。
//
atexit(fn1);
atexit(fn2);
atexit(fn3);
atexit(fn4);
// 这条输出语句具有参照性,它可不是最后一句输出.
puts("This is executed first.");
// EXIT_SUCCESS 代表 0,它定义在 stdlib.h 中.
// 我只是顺便提一下,也许你知道,但我担心你不知道,呵呵.
//
return EXIT_SUCCESS;
}版权声明:本文为【借你一秒】原创文章,转载请标明出处。
原文地址:http://blog.csdn.net/u013467442/article/details/49003369