(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