一、命令行参数
在介绍命令行参数前,我想问大家一个问题,在以前写C/C++时,main 函数可不可以带参数?
答案是可以带的,int main(int argc, char* argv[]){},但平时写代码时也证明了,main 函数的参数可带可不带。我们要讨论的内容是带 int argc, char* argv[] 有什么意义?
我们不妨写一个C语言代码,将argv中的内容打印出来看看。
使用gcc编译,形成可执行程序progress
在运行可执行程序progress后,我们发现main函数的参数 int argc, char* argv[] 是用来存储命令行字符串和其下标的,在存储中,以空格作为分隔符将命令行字符串拆散成一个个字串,来存入argv这个字符串数组,数组中下标为0的(第一个)元素是程序的路径+名称,后面的元素是和该进程匹配的选项。
那它为什么要这么做?
我们借用下面这段代码来进行理解。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("Usage: $s -[a,b,c,d]\n", argv[0]);
return 1;
}
if (strcmp(argv[1], "-a") == 0)
{
printf("this is function1\n");
}
else if (strcmp(argv[1], "-b") == 0)
{
printf("this is function2\n");
}
else if (strcmp(argv[1], "-c") == 0)
{
printf("this is function3\n");
}
else if (strcmp(argv[1], "-d") == 0)
{
printf("this is function4\n");
}
else
{
printf("no this function!!\n");
}
}
运行同一个程序,加上不同的选项,就出现了不同的结果,这就说明:在同一个程序中,我们可以通过不同的选项,来执行同一个程序内的不同的功能,那这又有什么用呢?
不知道大家还记不记得在之前的基本指令学习篇:
https://blog.csdn.net/wangdongdong23/article/details/136420870?spm=1001.2014.3001.5502
中,我们就可以通过一个相同的指令加上不同的选项来实现不同的功能。
命令行参数的本质是交给我们程序的不同选项,用来定制不同的程序功能。