Bootstrap

main函数的返回值及传参

1.main函数的返回值是返回给调用它的父进程也就是执行它的可执行文件。这个父进程调用子进程来执行一个任务,然后子进程执行完成后通过main函数的返回值返回给父进程一个答复,这个答复来表示子进程执行的结果是正确还是错误(0表示成功,负数表示失败)
(1)用shell脚本执行程序可以获取获取程序的返回值
创建shell脚本:vi return.sh

#!/bin/sh

./a.out
echo $? #$?表示./a.out的返回值

执行shell脚本:source return.sh

编写一个简单的main函数

#include <stdio.h>

int main(void)
{


        return 10;
}

先把main.c编译成可执行文件在执行shell脚本,查看返回值。

2.main函数的传参,是调用main函数所在程序的父进程给main函数传参,并接收main函数的返回值。
(1)为什么要给main函数传参
其实main函数的传参是具有选择性的,如果希望程序有一种灵活性,我们可以通过传参来控制程序中的运行,达到可以不需要重新编译(更改源代码)就可以改变程序运行结果的效果。
这里argc是int类型,表示运行程序的时候给main函数传递了多少个参数。argv是一个字符串数组,用来存储多个字符串,每个字符串就是我们给main函数传的一个参数。argv[0]就是传的第一个参数,argv[1]就是传的第二个参数······

#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{

        int i = 0;

        printf("main函数传参个数是:%d\n",argc);

        for(i=0;i<argc;i++)
        {
                printf("第%d个参数是%s\n",i,argv[i]);

        }

        if(argc != 2)
        {
                printf("请输入两个参数\n");
                return -1;
        }

        if(!strcmp(argv[1],"0"))
		{
                printf("boy\n");
        }

        else if(!strcmp(argv[1],"1"))
        {
                printf("girl\n");
        }

        else
        {
                printf("unnot\n");

        }

        return 0;
}

(3)本质上main函数传参都是父进程fork一个子进程,然后子进程和一个程序绑定起来去执行(exec族函数),我们在exec的时候可以给他同时传参。程序调用时可以被传参(也就是main函数的传参)是操作系统层面的支持完成的。

(4)给main函数传参需要注意什么
1.main函数传参都是通过字符串传进去的
2.程序被调用时传参,各个参数之间是通过空格来间隔的
3.在程序内部,如果要用argv前一定要先检验argc

3.这里我意外发现:
在./a.out 后面跟的参数如果有*他会将该目录下的所有文件当做传进去的参数。
在这里插入图片描述

;