c++ - getopt 参数取决于另一个

标签 c++ c command-line-arguments getopt getopt-long

在使用 getopt 时,是否有一种内置方法可以使一个参数依赖于另一个参数?例如,我有我的 switch case 设置并且一切正常,但在我读取文本文件 (-i) 之前我需要我的 -m 参数(马尔可夫链的长度)。

换句话说,我想确保在处理我的输入参数时没有设置其他参数。

小摘录:

    while ((opt = getopt_long(argc, argv, "i:shm:", long_options, &option_index))
       != -1)
{
    switch (opt) {
        case 'i':
            inputEnglish.ReadFile((string)optarg);
            break;

        case 'm':
            inputEnglish.setMarkovLength(atoi(optarg));
            break;

        case 's':
            break;

        case 'h':
            printHelp();
            break;

        case '?':
            cout << "dfgdfgdf" << endl;
            return 0;
            break;

        default:
            printHelp();
            return 0;
            break;
    }
}

如果没有任何内置方法,您是否有一种干净的方法来执行此操作?干净的代码在这里比效率更重要。感谢您的帮助!

最佳答案

保存文件名,只有在处理完所有命令行参数后才处理它。这通常是最好的方法——getopt 代码应该只解析,而不是处理。

或者,这是大多数命令的工作方式,不要为文件名使用标志...所以用法是 pgm -m foo 文件名。然后,在处理完所有标志后,您只需将剩余的参数(argv[optind] 到 argv[argc-1])作为文件名进行处理。这有利于根据标志值处理文件的常见情况(如您的情况)。

关于c++ - getopt 参数取决于另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163106/

相关文章:

c++ - 动态数组初始化

C++ const 通过指针改变,或者是吗?

macos - 从 Mac 中的 pkg 文件安装后打开应用程序

python - 如何从 python 中的参数列表格式化 shell 命令行

python - Hadoop Mapreduce python命令行参数

c++ - thrust::sort_by_key 上的无效配置参数

c++ - 我们不能在 view::chunk 之前惰性地执行 view::filter 吗?

c++ - 即使我修改了 LD_LIBRARY_PATH,也找不到我的共享库

c - 为什么可以不使用其确切名称来调用函数?

c - 如何编写链接器