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 后面跟的参数如果有*他会将该目录下的所有文件当做传进去的参数。