4

引用自POSIX.1-2008 关于-Woption的描述,

( -Wcapital-W) 选项应保留给供应商选项。

引用自 Linux 手册页,GNU getopt 处理-W选项如下

如果optstring包含W后跟semicolon( ; ),则将-W foo其视为长选项--foo。(POSIX.2 为实现扩展保留了-W选项。)

有人可以以更清晰的方式(直截了当)解释上述句子并解释为什么这样的选项有用吗?

上面的陈述让我感到困惑,因为我认为getopt(not getopt_long, getopt_long_only) 只理解短选项。

4

2 回答 2

6

查看:http ://www.gnu.org/software/gnuprologjava/api/gnu/getopt/Getopt.html

长选项也可以使用特殊的 POSIX 参数格式(我强烈反对)来指定。通过放置“W;”来启用这种输入形式 (是的,'W' 然后是分号)在有效的选项字符串中。这导致 getopt 将“-W”后面的名称视为长选项的名称。例如,“-W outputdir=foo”等同于“--outputdir=foo”。该名称可以紧跟在“-W”之后,如下所示:“-Woutputdir=foo”。选项参数的处理方式与普通长选项相同。如果“-W”后面的字符串不代表有效的长选项,则 getopt() 返回“W”,调用者必须决定要做什么。否则 getopt() 返回一个长选项值,如下所述。

于 2013-01-15T13:08:43.773 回答
3

文档有点不清楚,我的解释是关于的部分 -W仅适用于getopt_long()并且getopt_long_only()出于这个原因。

幸运的是,GNU C 库是开源的。:)

在内部,所有这三个函数都是通过调用一个工作函数(_getopt_internal())来实现的,并且处理-W是在该函数内部完成的。但是,如果没有可用的长选项定义(从 调用时就是这种情况getopt(),它将返回'W'.

查看这个提交,或者直接点击阅读posix/getopt.c

于 2013-01-15T13:08:53.430 回答