关闭getopt_long(optarg.h)中的缩写?

时间:2011-03-03 14:29:47

标签: linux unix getopt getopt-long

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

  

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

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

3 个答案:

答案 0 :(得分:4)

Codeape,

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

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

答案 1 :(得分:2)

如果您使用argp_parse()而不是getopt()(强烈推荐,BTW),您可以访问用户通过

输入的确切标记
state->argv[ state->next - 2 ]

这有点像黑客,但应该有用。

答案 2 :(得分:1)

这不是完美的解决方案,但您可以在调用getopt_long()(通常在交换机内)之后检查用户给出的确切arg,如下所示:

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

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