【问题标题】:Turn off abbreviation in getopt_long (optarg.h)?关闭 getopt_long (optarg.h) 中的缩写?
【发布时间】:2011-03-03 14:29:47
【问题描述】:

是否可以关闭getopt_long() 中的缩写?从手册页:

如果缩写是唯一的或与>某些定义的选项完全匹配,则可以缩写长选项名称。

我想这样做是因为我收到的一段代码规范要求标志的全长完全匹配,而且标志有很多。

【问题讨论】:

    标签: linux unix getopt getopt-long


    【解决方案1】:

    代码,

    似乎没有办法禁用缩写功能。您并不是唯一一个希望使用此功能的人。见:http://sourceware.org/bugzilla/show_bug.cgi?id=6863

    不幸的是,glibc 开发人员似乎不想要该选项,因为上面链接的错误报告已通过“WONTFIX”解决。你可能在这里不走运:-\

    【讨论】:

      【解决方案2】:

      如果你使用 argp_parse() 而不是 getopt()(强烈推荐,顺便说一句),你可以通过

      访问用户输入的确切标志 state->argv[ state->next - 2 ]

      这有点小技巧,但应该可以。

      【讨论】:

        【解决方案3】:

        这不是完美的解决方案,但您可以在调用 getopt_long()(通常在 switch 中)后检查用户给出的确切参数,如下所示:

        if (strcmp(argv[optind-1], "--longoption") == 0)
        

        optind 指向您需要处理的下一个参数。因此,您可以使用 optind-1 访问原始 arg。

        【讨论】:

          猜你喜欢
          • 2017-12-26
          • 2012-01-06
          • 1970-01-01
          • 2019-08-20
          • 1970-01-01
          • 1970-01-01
          • 2020-07-21
          • 1970-01-01
          • 2014-03-11
          相关资源
          最近更新 更多