4

optionに関する POSIX.1-2008 の説明-Wから引用、

( -Wcapital-W) オプションは、ベンダー オプション用に予約する必要があります。

Linux のマニュアル ページから引用すると、GNU getopt は-Wオプションを次のように処理します。

optstringWの後にsemicolon( ; )が含まれている場合-W foo、 は長いオプションとして扱われます--foo。( -Wオプションは、実装拡張のために POSIX.2 によって予約されています。)

誰かが上記の文をより明確な方法で(簡単に)説明し、そのようなオプションが役立つ理由を説明できますか?

短いオプションしか理解できgetoptない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」と同等です。「-Woutputdir=foo」のように、「-W」の直後に名前を付けることができます。オプション引数は、通常の長いオプションと同様に処理されます。「-W」の後に文字列が続き、有効な長いオプションを表していない場合、getopt() は「W」を返し、呼び出し元は何をすべきかを決定する必要があります。それ以外の場合、getopt() は以下で説明する長いオプション値を返します。

于 2013-01-15T13:08:43.773 に答える
3

ドキュメンテーションは少し不明確です。私の解釈では、約部分は まさにその理由で-Wのみ適用されgetopt_long()ます。getopt_long_only()

幸いなことに、GNU C ライブラリはオープン ソースです。:)

内部的には、これら 3 つの関数はすべてワーカー関数 ( _getopt_internal()) を呼び出すことによって実装され、その処理は-Wその関数内で行われます。ただし、長いオプション定義が利用できない場合 ( から呼び出された場合のようにgetopt()'W'.

このコミットを参照するか、クリックしてposix/getopt.cを直接読んでください。

于 2013-01-15T13:08:53.430 に答える