C++ main函数处理命令行选项

一般情况下,我们定义的main函数都只有空的形参列表:

1
int main() { ... }

然而,有时我们确实需要给main函数传递实参,一种常见的情况就是用户需要设置一组选项来确定函数所要执行的操作。此时,main函数定义为:

1
int main(int argc, char* argc[]) { ... }

其中第二个形参argc是一个数组,它的元素是指向C风格字符串的指针;第一个形参argc表示数组中字符串的数量。因为第二个形参是数组,所以main函数也可以定义为:

1
int main(int argc, char** argv) { ... }

其中argv指向char*。

当实参传给main函数之后,argv的第一个元素指向程序的名字或者一个空字符串,接下来的元素依次传递命令行提供的实参。

编写一个简单的测试程序:

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main(int argc, char* argv[])
{
while(argc-- > 0)
{
printf("argc = %d, argv[%d] = %s\n", argc, argc, argv[argc]);
}
return 0;
}

在cmd中运行生成的测试程序:

1
2
PS D:\xxx> ./mainfunpara.exe
argc = 0, argv[0] = D:\xxx\mainfunpara.exe
1
2
3
4
5
PS D:\xxx> ./mainfunpara.exe 我 你 他
argc = 3, argv[3] = 他
argc = 2, argv[2] = 你
argc = 1, argv[1] = 我
argc = 0, argv[0] = D:\xxx\mainfunpara.exe

argc的实参数组中第一个字符串均为程序的名字,后续的字符串为传入main函数的字符串(以空格分隔),如果没有向main函数传入字符串,则argc为0。

参考文献:

《Primer c++》第5版 page196

Author: wnxy
Link: https://wnxy.github.io/2022/05/07/cpp_main_function_parameters/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.