:
int key
オプションパーサへの現在のオプションが提供する整数key
。 key
は、印刷可能なASCII文字(すなわち、 isascii (key)
が真である)である値を持っている場合、それはまた、char
は、コードkey
とASCII文字で短いオプション-char
、 を指定します。言い換えれば
、オプションのkey
フィールドは、任意のint
値にすることができ、かつisascii(key)
がゼロであれば、それはまた、あなたが範囲は0x00外で非ASCII値(値を使用することができることを意味し、短いオプション—を指定します..0x7F)を使用して短いオプションを回避します。短いオプションではないにもかかわらず、関連付けられたロングオプション(例:--foo
)の値としてkey
の値が引き続き使用されるため、どのキー/ショートオプションと同じように扱います。
O/T:enum
のすべてのオプションキーを定数として収集していますので、0x100
のオプションがswitch
で表されています。 GNU tar
のために、それは、その圧縮オプションのためにこのようなものかもしれません:
enum compress_options {
// Archive file extension determines compression program
COMP_FILTER_AUTO = 'a',
// Option arg is program used to deal with compression
COMP_FILTER_ARG = 'I',
COMP_FILTER_BZIP2 = 'j',
COMP_FILTER_XZ = 'J',
COMP_FILTER_GZIP = 'z',
COMP_FILTER_COMPRESS = 'Z',
COMP_FILTER_LZIP = 0x100,
COMP_FILTER_LZMA,
COMP_FILTER_LZOP,
// Do not use archive suffix to determine compression program.
COMP_FILTER_NOAUTO,
};
次に、あなただけのオプションの次のセットを持つオプションの問題を回避するために0x200
、その後0x300
などを使用していることを保証するために必要があるだろう同じ値。必要に応じて、0x100
、0x180
、0x200
、0x280
など(例:0x100
はサブコマンドを表し、0x180
はそのサブコマンドの最初のオプションです)。
ショートオプションと非ショートオプションを別々にグループ化することが重要です。 enum
の暗黙的に割り当てられた値は、最後に明示的に割り当てられた値の値に依存します。私がCOMP_FILTER_AUTO
の直後にCOMP_FILTER_NOAUTO
を置いた場合、--no-auto-compress
ロングオプションは関連するショートオプション-b
を持っていましたが、それは実際にはありません。
負の数(たとえば、「-1」)を「短い」オプションとして使用し、それをスイッチで処理できます。 – keltar
オプションの 'key'フィールドには任意の' int'値を指定できます。 'isascii(key)'が真である場合、 'key'は短いオプション' -char'( 'char'は文字コード' key'に関連する文字です)であることをドキュメントは述べています。技術的には、 'isascii'は' 0x00 <= key && key <0x80'を保証するので、その範囲外の 'int'値をキーに使うことができます。この 'key 'は関連するロングオプション(' --foo'など)の値として引き続き使用されるため、任意のキー/ショートoptと同じように扱います。ところで、私はすべてのオプションキーを定数として 'enum'で集めているので、' switch 'に何のオプション '0x100'があるのか不思議ではありません;-) –
@ChronoKitsuneそれは答え、狐を作ることができます。 Btw、キーとして '-opt'を使わないのはなぜですか(私は、短いオプションになる*否定的な値)。例えば。 's'と' d 'が意味のある短いオプションであれば、絶対値> 0x80を持つ '-'s''と' -'d''を使います。 –