(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