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

问题描述 投票:0回答:3

是否可以关闭

getopt_long()
中的缩写?从手册页:

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

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

linux unix getopt getopt-long
3个回答
4
投票

Codeape,

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

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


2
投票

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

访问用户输入的确切标志
状态->argv[状态->下一个 - 2]

这有点麻烦,但应该可以工作。


2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.