main函数执行前:
- 设置栈指针
- 初始化static静态和global全局变量,即data段的内容
- 将未初始化部分的全局变量赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容
- 运行全局构造器,估计是C++中构造函数之类的吧
- 将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数
main函数执行后:
- 全局对象的析构函数会在main函数之后执行;
- 可以用_onexit 注册一个函数,它会在main 之后执行;
C语言没有构造函数问题,所以main差不多一定是第一个被调的函数了。
C++继承了这个说法,所以编译器会在mian里加上2个函数
int main()
{
__enter_main();//于此构造所有全局变量
//你的代码
__exit_main();//于此析构所有全局变量
}
当然,也可能封装成
int real_main()
{
__before_main();
main();
__after_main();
}
所以,在调用你写的main里面的第一行代码前,完全可能调用其它函数。