C语言main函数
简介
main
函数是一个c语言程序的入口函数。
定义
|
|
返回值
main函数有返回值,类型是int;
main函数有返回值:0,正常退出;非零,异常退出;
如果代码中main函数没有return 语句的话,C99 和C++89都规定编译器要自动在生成的目标文件中加入return 0,表示程序正常退出。
main原理
包含main函数的c语言源程序经过编译后,需要和glibc标准库进行链接,最终生成目标二进制文件;
目标文件的glibc程序包含了各个平台的二进制程序入口,在linux中,这个入口为
_start
汇编入口;在
_start
入口程序中,经过一系列初始化后,会最终跳转到main的汇编地址并执行;
|
|
main函数运行之前
设置栈指针;
初始化static静态和global全局变量,即data段的内容;
将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容
运行全局构造器,类似c++中全局构造函数;
将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数;
下面,我们就来说说在mian函数执行之前到底会运行哪些代码:
(1)全局对象的构造函数会在main 函数之前执行。
(2)一些全局变量、对象和静态变量、对象的空间分配和赋初值就是在执行main函数之前,而main函数执行完后,还要去执行一些诸如释放空间、释放资源使用权等操作
(3)进程启动后,要执行一些初始化代码(如设置环境变量等),然后跳转到main执行。全局对象的构造也在main之前。
(4)通过关键字attribute,让一个函数在主函数之前运行,进行一些数据初始化、模块加载验证等。
main函数之后执行的函数
全局对象的析构函数会在main函数之后执行;
用
atexit
注册的函数也会在main之后执行。
|
|