程序在进行入口函数地址执行之前,先将执行下列函数,为程序的运行准备环境。入口函数地址有三个参数,分别为命令行参数个数,命令参数信息和环境变量信息,main函数作为启动三个参数的唯一函数。
main函数被调用前先要调用的函数如下:
getversion();
获取当前运行平台的版本号。控制台程序运行在Windows模拟的dos下,因此这里获取的版本好为ms-dos的版本信息。
_heap_init();
用于初始化堆栈空间。在函数实现中使用HeapCreate申请堆空间,申请空间的大小由_heap_init传递的参数决定。_sbh_heap_init函数用于初始化堆结构信息。
GetCommandLine();
获取命令行参数信息的首地址。
_crtGetEnvironmentStringA();
获取环境变量信息的首地址。
_setargv();
此函数根据getcommandLineA获取命令行参数信息的首地址并进行参数分析,将分离的参数的个数保存在全局变量_argc中,将分析的每个命令行参数的首地址放在数组中,并将这个字符串指针的首地址保存在全局变量_argv中。
_setenvp();
此函数根据_crtGetEnvironmentStringA函数获取环境变量信息的首地址并进行分析,将得到命令行参数的个数,以及命令行参数信息。
_cinit();
用于将全局数据和浮点寄存器的初始化。全局对象和IO流等的初始化都是通过这个函数实现的。利用函数_inittern进行数据链初始化,这个函数由两个参数组成,类型为“_PVFV*",这是一个函数指针数组,其中保留了每个初始化函数的地址。初始化函数的类型为_PVFV.