带有选项的C ++命令行参数中的getopt

时间:2011-12-22 05:57:20

标签: c++

我正在编写一个简单的程序,让-d包含一个参数以及其他参数

我希望他们使用aa.cc运行以下选项

  • aa -d 123 param1 param2
  • aa param1 param2 -d 123

我已按以下方式编写代码

    /* sample */

    char *level:
    while ((ch = getopt(argc, argv, "d:")) != EOF) {
        switch(ch) {
        case 'd':
            level = optarg;    
            debug = TRUE;
            break;
        default:
            usage();
            /*NOTREACHED*/
        }
    }

当给出时,它正常工作 aa -d 123 param1 param2但不是 当作为 aa param1 param2 -d 123

有人可以建议我们如何实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

除非您使用getopt()的GNU版本,否则选项参数(例如-d 123)必须位于非选项参数之前(例如param1param2) 。 (见POSIX 'Utility Conventions'。)

如果您正在使用GNU getopt(),它将扫描整个参数列表(最多但不包括--参数),处理非选项后找到的选项,除非{{1}设置环境变量(在这种情况下,它的行为类似于POSIX POSIXLY_CORRECT)。

如果您不使用GNU getopt(),则必须在非选项之前使用选项,或者切换到GNU getopt(),或者编写自己的选项。