main函数之前编译器都为你干了什么?
来源:互联网 发布:linux系统维护工程师 编辑:程序博客网 时间:2024/04/29 20:50
vc++开发的程序,程序在调试时总是从main函数开始,这就让很多开发者认为main函数就是应用程序的入口.其实不然,在main函数执行之前,编译器已经为我们干了很多事!
一个小例子即可说明:
#include<iostream>using namespace std;void start(){cout<<"front of the main"<<endl;}class Test{public:Test(int val = 0):value(val){start();}~Test(){}private:int value;};Test a;int main(void){cout<<"main is over"<<endl;return 0;}运行结果:
front of the main
main is over
由此可以看出,全局对象的构造就是在main函数执行之前完成的 那么问题来了:main函数之前,编译器都干了什么呢?
在VC++6.0中,main函数之前进行的相关工作
GetVersion函数: 获取当前运行平台的版本号
_heap_init函数:用于初始化堆空间
GetCommandLineA函数:获取命令行参数信息首地址
_crtGetEnvironmentStringA函数:获取环境变量信息的首地址
_setargv函数:此函数根据获取的命令行首地址,将命令行参数进行分离,并将分离出的参数个数保存到全局变量_argc中,将每个参数的地址保存到全局变量_argv数组中去,这样就得到了命令行参数的个数以及命令行参数信息
_setenvp函数:此函数根据获得的环境变量的地址信息,将每个环境变量的地址保存到全局变量env数组中去
当调用main函数时,便可以将_argc,_argv,env三个全局变量作为参数传递到main函数中去
_cinit函数:用于全局数据(如全局变量和IO流)和浮点数寄存器的初始化
直到完成以上步骤后,编译器才真正的去调用main函数!
0 0
- main函数之前编译器都为你干了什么?
- main函数之前都执行了什么?
- 编译器都干了些什么
- 编译器三级优化都干了什么?
- main()之前都作了什么
- main函数之前究竟发生了什么?
- main函数之前做了什么?
- main函数之前做了什么?
- 进入main函数之前做了什么?
- main函数之前究竟发生了什么?
- main函数之前发生了什么
- 编译器都在你的眼皮底下干了啥?
- 在main()之前,IAR都做了些什么工作
- 让领导知道你都干了些什么
- 我都干了什么
- 程序在main函数之前做了什么
- iOS程序main函数之前发生了什么
- iOS程序main函数之前发生了什么
- 基础练习 分解质因数
- 从中医角度分析吸烟
- Java ThreadLocal类
- codeblocks+widgets-windows
- 递归 放苹果
- main函数之前编译器都为你干了什么?
- Hello world!
- 单调栈的进一步理解,poj2796
- 语音识别系统第一课-Xcode配置PortAudio Based on Mac X10.10
- 条款16 成对使用new和delete时要采取相同形式
- 正则表达式
- 一个机器学习博士生的忠告
- 初步了解了angularJS的mvc
- 二分查找