利用できるオプションは2つあると思います。1つは機能し、もう1つは機能する場合と機能しない場合があります。
「機能する場合と機能しない場合がある」オプションは、次のように例示されます。
char *opts = "abc";
char *opts_d = "abcd:";
while ((opt = getopt(argc, argv, opts)) != -1)
{
switch (opt)
{
case 'a':
aflag = 1;
break;
case 'b':
bflag = 1;
break;
case 'c':
cflag = 1;
opts = opts_d;
break;
case 'd':
dflag = 1;
dvalue = optarg;
break;
default:
...error handling...
break;
}
}
[への連続した呼び出しで有効なオプションのリストを変更することを妨げるものがあるかどうかgetopt()][1]
はわかりませんが、通常、オプションを変更することは行われていません。したがって、注意して扱ってください。-c
オプションが見つからない場合、のopt
値がd
によって返されることgetopt()
はないため、コードはそれ以外の方法で実行されないことに注意してください。-d
ユーザーがの前にオプションを入力すると-c
、getopt()
を処理するときに無効なオプションが報告されることに注意してください-d
。エラー報告を制御できます。あなたはおそらくしなければならないでしょう。(optopt
変数には、無効として検出された実際のオプション文字が含まれています。)
「動作します」オプションは次のとおりです。
while ((opt = getopt(argc, argv, "abcd:")) != -1)
{
switch (opt)
{
case 'a':
aflag = 1;
break;
case 'b':
bflag = 1;
break;
case 'c':
cflag = 1;
break;
case 'd':
if (cflag == 0)
...report error about must use -c option before -d option...
dflag = 1;
dvalue = optarg;
break;
default:
...error handling...
break;
}
}