をPOSIXLY_CORRECT
が環境に設定されているかどうか、それはあなたがGNU getopt()
を使用したりしていないかどうかに依存し、あなたがしている場合。
古典的に(非GNU getopt()
を意味する)、すべてのオプション引数は、オプションではない(ファイル名)引数の前に指定する必要があります。つまり、オプションのない引数が4つあることを意味します。
GNU getopt()
があり、POSIXLY_CORRECT
が設定されていない場合は、コマンドラインの任意の場所でオプション引数を処理します。その場合、引数値がfoo
の-r
とオプションのない引数が2つ(hello
とbar
)の2つのオプションがあります。
が-r
を認識するためにクラシックgetopt()
を取得するには、まず(非オプション)引数を必要とする必要があるだろうとだけにして、全くgetopt()
を呼び出す:
int main(int argc, char **argv)
{
char *cmd = argv[1];
int opt;
argv[1] = argv[0];
argv++;
argc--;
while ((opt = getopt(argv, argc, "r:")) != EOF)
{
switch (opt)
{
case 'r':
...capture optarg...
break;
default:
...report error....
break;
}
}
for (int i = optind; i < argc; i++)
process_non_option_argument(cmd, argv[i]);
return(0);
}
GNU getopt
を、非オプションを返すことができます。あなたがそれを可能にする場合は、引数を使用します。それ以外の引数は、常にオプションではない引数として扱われます。bar
おそらく 'argv [optind ++]'のようなものでしょうか? –