个人理解—main函数详解

        main函数返回给谁?

int main(void);
inr main(int argc , char **argv);
inr main(int argc , char *argv[]);

         上面的是三种常用的main函数书写方式,main函数从某种程度代表了这整个程序,谁执行了这个程序,谁调用了main()。

        执行一个新进程的本质:创建、加载、运行、消亡。在linux中可以用./xxx执行,用shell执行,用fork、exec执行,本质上是被父进程fork出来的。

        命令行本质是一个进程,在命令行中通过./xxx fork了一个程序,成为了命令行的子进程,可见main()函数的返回值是返回给父进程,一般就返回一个执行结果,0表示成功,负数表示失败。

        验证main()函数的返回值,写一个shell:

#! /bin/sh
./a.out
echo $?

        source xxx.sh执行这个脚本。父进程调用子进程后用$?存储,表示上一个程序的返回结果。return返回值默认为int。

int main()
{
    xxxx
    return 0;
}

float main()
{
    xxxx
    return 0;
}

        上面两个main()都会返回0,但float的0是错误的。当将return返回值改为123,int返回123,float返回0。

        int main(int argc , char **argv);的参数解析:父进程给main()传参的原因灵活性问题。main(void)也可以,不必进行传参,大多数程序都可以。希望main()有灵活性,不进行重编译而改变运行结果。

        给main()函数传参,通过C语言预定参数argc和argv实现。argc表示给mian传了几个参数,argv是一个字符串数组,用于存储字符串数组,每个字符串就是一个参数。argv[0]的第一个参数。

        一个程序的argc默认为1,argv[0]默认为程序名:

int main(int argc , char* argv[])
{
    printf("argc=%d",argc);         输出:argc=1
    printf("argv[0]=%d",argv[0]);   输出:argv[0]=a.out
} 
int main(int argc , char* argv[])
{
    for(int i=0;i<argc;i++)
        {
            printf(“argv[i]=%d\n”,argv[i]);
            }
    printf(“argc=%d\n”,argc);
} 

        上面这个程序运行方式:/a.out abc 33 xx。

                                     打印:/a.out

                                                 abc

                                                 33

                                                 xx

        argc的值会自增。

        程序调用的本质就是父进程fork为子进程,然后与一个进程绑定,去执行(exec函数族),在exec时进行参数传递,程序调用被参数传递,是操作系统支持的。

        注意main()传参,传的是字符串,在程序内部用argv时,一定会检测argc,传的参数个数不对时会报错。

./calculator 3 + 5

argc=4
argv[0]="calculator"
argv[1]="3"
argv[2]="+"
argv[3]="5"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值