gcc main.c add.c -o app
上面这样一个命令你是否感到很疑惑,这句话为什么这么写?它是怎么执行的呢?
其实 gcc 本身是一个可执行文件,后面的所有内容作为这个可执行文件的命令行参数传递进来,然后去执行文件,这就是这个命令实现的原理。
这篇文章来帮大家去认识一下什么是命令行参数,它是怎么使用的。
传递命令行参数
上面这些参数是怎么传入进来的呢?C 的 main 函数是具有两个形参的,第一个 argc,代表命令行参数的数目,第二个参数是 argv,指向了一组参数值,这些参数值是通过指针的方式存储在 argv 指向的数组中的。也就是说 argv 本质上是一个指向一个指针数组的指针。
int main(int argc, char **argv);
例如:cc -c -i main.c insert.c -o test 得到的参数如下。

注意指针数组:这个数组的每个元素都是一个字符指针,数组的末尾是一个 NULL 指针。argc 的值和这个 NULL 值都用于确定实际传递了多少个参数。argv 指向数组的第 1 个元素,这就是它为什么被声明为一个指向字符的指针的指针的原因。
还需要注意,就是 argv 里面的第一个参数是程序的名称,将自己的名称传入自己的程序有什么用呢?由于程序是知道自己的名字的,所以这个值通常被忽略掉。但是也有一些特殊的场景,程序会选择不同的选项进行程序运行。例如说 UNIX 系统中列出目录文件的命令 ls。当他以 ls 运行时,就会产生文件的简单列表;当他以 l 运行的时候,就会产生一个多列的简单列表;当他以 ll 启动时,就会产生一个文件的详细列表。程序会对第一个名字进行检查,确定去执行哪部分程序。
下面给大家一个简单的例子,去理解一下具体是怎么去处理参数的。
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("参数数量: %d\n", argc);
for (int i = 0; i < argc; i++) {
printf("第 %d 个参数: %s\n", i, argv[i]);
}
return 0;
}
编译:gcc main.c -o app
输入:./app a b c
输出:参数数量:4
第 1 个参数:a
第 2 个参数:b
第 3 个参数:c
2063

被折叠的 条评论
为什么被折叠?



