【发布时间】:2021-07-22 19:41:58
【问题描述】:
我是 C++ 新手,正在尝试读取如下指定的命令行参数。
./helloworld -i input_file -o outputfile -s flag3 -t flag4
我尝试按如下索引对标志进行硬编码
int main(int argc, char *argv[]) {
// argv[1] corresponds to -i
// argv[2] corresponds to input_file
// argv[3] corresponds to -o
// argv[4] corresponds to outputfile
// argv[5] corresponds to -s
// argv[6] corresponds to flag3
// argv[7] corresponds to -t
// argv[8] corresponds to flag4
}
然后我意识到可以更改顺序,所以我不能使用硬编码索引,我使用了
unordered_map
这很好,但我想知道有没有更好的方法来做同样的事情。
【问题讨论】:
-
使用命令行解析器库。
-
有许多现有的库处理解析命令行参数和选项。例如Boost program options。如果您已经在使用不同的框架,那么看看它是否有什么东西。或者,如果您使用的是 POSIX 系统(例如 Linux 或 macOS),您可以使用
getopt。 -
我觉得你的方式不错。
标签: c++ c++11 command-line-arguments