有效地在C++中进行命令行参数处理的建议:
注意:仅限Windows
1: #include <iostream.h>
2: int main(int argc, char **argv)
Run Code Online (Sandbox Code Playgroud)
而不是,例如:
if ( argc != 3 ) {
....
}
Run Code Online (Sandbox Code Playgroud)
问候
j_r*_*ker 18
如果您只想自己处理命令行选项,最简单的方法是:
vector<string> args(argv + 1, argv + argc);
Run Code Online (Sandbox Code Playgroud)
在你的顶部main().这会将所有命令行参数复制到std::strings 的向量中.然后,您可以==轻松地比较字符串,而不是无休止的strcmp()调用.例如:
int main(int argc, char **argv) {
vector<string> args(argv + 1, argv + argc);
string infname, outfname;
// Loop over command-line args
// (Actually I usually use an ordinary integer loop variable and compare
// args[i] instead of *i -- don't tell anyone! ;)
for (vector<string>::iterator i = args.begin(); i != args.end(); ++i) {
if (*i == "-h" || *i == "--help") {
cout << "Syntax: foomatic -i <infile> -o <outfile>" << endl;
return 0;
} else if (*i == "-i") {
infname = *++i;
} else if (*i == "-o") {
outfname = *++i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑:我意识到我正在将argv[0]程序的名称复制到args- 修复.]
有许多好的图书馆可供选择.
Boost Program Options是一个相当重要的解决方案,因为将它添加到您的项目需要您构建提升,并且语法有点令人困惑(在我看来).但是,它可以执行几乎所有操作,包括使命令行选项覆盖配置文件中设置的选项.
SimpleOpt是一个相当全面但简单的命令行处理器.它是一个单独的文件并且具有简单的结构,但只处理将命令行解析为选项,您必须执行所有类型和范围检查.它适用于Windows和Unix,并且还附带了适用于Windows的glob版本.
getopt在Windows上可用.它与Unix机器上的相同,但它通常是GPL库.
| 归档时间: |
|
| 查看次数: |
7979 次 |
| 最近记录: |