main函数浅析

本文详细阐述了C语言中main函数的重要性,包括其返回值规范,参数的argc和argv含义,以及main函数的执行顺序,特别强调了voidmain()的不适用。还介绍了main函数运行前的系统初始化过程。
摘要由CSDN通过智能技术生成

main函数返回值

main函数, 是C语言程序的主函数,要求有返回值且该返回值返回给(如操作系统)来表明该程序的执行状况。返回0代表程序正常执行成功,通常,返回非零代表程序异常退出,因此返回值需要是int整型,于是有了int main()的规范。

如果使用void main(),即声明主函数没有返回值,程序虽能编译、运行成功,却不利于程序的激活者判断其状态,所以我们应该抛弃void main()这种写法,坚持int main()的规范。

main函数参数

理论上说,main函数的参数可以无限多个。
一般有以下几种形式:

int main( void );
int main( int argc, char *argv[ ] );
int main( int argc, char *argv[ ], char *envp[ ] );//一般用不上

argc表示的是传入参数的个数,argc 参数始终大于或等于 1。
char* argv[],是字符串数组,用来存放指向的字符串参数的指针数组,每一个元素指向一个参数。
argv[0]:指向程序运行的全路径名(程序的文件名)。
argv[1]:指向执行程序名后的第一个字符串 ,表示真正传入的第一个参数。
argv[2]:指向执行程序名后的第二个字符串 ,表示传入的第二个参数。
……argv[n]:指向执行程序名后的第n个字符串 ,表示传入的第n个参数。
规定:argv[argc]始终为NULL ,表示参数的结尾
char* envp[],也是一个字符串数组,主要是保存这用户环境中的变量字符串,以NULL结束。envp[]的每一个元素都包含ENVVAR=value形式的字符串,其中ENVVAR为环境变量,value为其对应的值。(一般用不上)

#include <stdio.h>

int main(int argc ,char* argv[] ,char* envp[])
{
    int i = 0;

    while(envp[i++])
    {
        printf("%s", envp[i]);//相当于linux的env
    }//会将所有的环境变量打印出来

    return 0;
}

main的执行顺序

出乎我意料的是,main函数并不是程序执行的第一个函数。
linux系统下程序的入口是”_start”,这个函数是linux系统库的一部分,当我们的程序和linux系统库链接在一起形成最终的可执行文件的之后,这个函数就是程序执行初始化的入口函数。

main函数运行之前的工作:(这里目前不太懂)
1.设置栈指针
2.初始化static静态和global全局变量,即data段的内容
3.将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容
4.运行全局构造器,类似c++中全局构造函数
5.将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

marsevilspirit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值