C/C++有什么库可以完成命令行参数解析?
建议 cmdline,代码风格是比较优美的,而且操作简单,readme 一读就会用。另外还是 head-only 库,不需要额外链接,配置简单。
另一个答主说的 gflags 也比较著名,个人认为学习成本略高。不过毕竟是 Google 家的,专业性没的说。
至于自己切分成 vector& 的方案就不建议用了,自己在业务代码里做一堆字元解析和判断够乱的。
cxxopts
google gflag
不太理解你说的「现多个参数连在一起使用」是什么意思,权且贴一个我的库吧,但愿能有帮助。如果不行的话,你可以再详细描述一下,然后github上提issues。
jingweizhanghuai/Morn?github.com
介面
char *mStringArgument(int argc,char **argv,const char *flag);
argc、argv就是main函数传入的参数,argc是参数个数,argv是参数内容(从argv[1]开始)。
flag是要寻找的参数标志,这里的标志必须以字元「-」打头,flag可以是一个字元,也可以是多个字元。
返回值就是找到的命令参数,它是字元串格式,通常,如果参数是数值的话,还需要和
atoi
,atof
,ssanf
等函数一起使用。如果没有找到,返回值是NULL。
例如:
int main(int argc,char **argv)
{
char *para = mStringArgument(argc,argv,"a");
if(para!=NULL) printf("para is %s
",para);
else printf("no para
");
}以上面的程序为例,可见
mStringArgument
支持以下形式的参数:
$ test.exe -a12345
para is 12345
?
$ test.exe -a 12345
para is 12345
?
$ test.exe -a=12345
para is 12345
?
$ test.exe -a=12345 -b=6789
para is 12345
?
$ test.exe -a
para is ?也即:以下三种形式的参数都是合法的,且三种方式等价:
-a12345
,-a 12345
,-a=12345
。对于最后一种,虽有参数,但未指定值的情况,将返回一个字元串,其值为「?」。
对于以下两种情况:
$ test.exe
no para
?
$ test.exe -b=6789
no para即①没有参数或②虽有参数但是与给定的标志不匹配(参数为b,指定为a),其返回值都为NULL。
对于以下情况,应在程序设计时避免出现
$ test.exe -ab=12345
para is b=12345或许开发者的本意是参数
ab
的值为12345
,但是对于参数解析函数来说,不能区分①参数为ab
,值为12345
,②参数为a
,值为b=12345
,这两种情况。因此应避免使用,否则将可能出错。对于多个参数有相同的标志位的,
mStringArgument
将循环读取各个参数。例如:
int main(int argc,char **argv)
{
char *para = mStringArgument(argc,argv,"a");
char *para0=para;
do{
if(para!=NULL) printf("para is %s
",para);
else {printf("no para
");break;}
para = mStringArgument(argc,argv,"a");
}while(para!=para0);
}运行以上程序,会得到:
$ test.exe -a=12 34 5
para is 12
para is 34
para is 5
?
$ test.exe -a12 -a34 -a5
para is 12
para is 34
para is 5
?
$ test.exe -a12 -a=34 -a:5
para is 12
para is 34
para is 5$ test.exe -a12 34 -b 67 89 -a5
para is 12
para is 34
para is 5怎么没人提 boost::program_options
可以解析命令行和配置文件,用的人挺多的啊。
cli11
为何多个参数不可一起用呢?先声明变数,getopt解析并给变数赋值,最后判断几个变数的值组合使用。
Qt QCommandLineParser
https://doc.qt.io/qt-5/qcommandlineparser.html?doc.qt.ioclara
*9;/。;
???这你自己切分一下,放到个vector里不就得了
推荐阅读: