1

次のコードがあります。

char opt;
int bla1,bla2,bla3;
char *myarg = NULL;
while((opt = getopt(argc,argv,"a:b:cd")) != -1)
{
    switch (opt)
    {
        case 'a':
            bla1 =  atoi(optarg);
            break;
        case 'b':
            myarg = optarg;
            break;
        case 'c':
            bla2 = 1;
            break;
        case 'd':
            bla3 = 1;
            break;
        default:
            break;
    }
}

ケース「b」でoptargを使用できるようにしたいのですが、デフォルト値を取得するために何も選択されていない場合。現在、引数が必要であり、それをバイパスできません。「b:」を「b」に置き換えると、引数が無視されます。

両方の状況で機能させるにはどうすればよいですか?

4

1 に答える 1

2

すべてではありませんが、一部のバージョンでは、関連するオプション文字の後にgetopt2 つのコロンを置くことで、引数がオプションであることを示すことができます。

オプションに省略可能な引数が必要な場合は、長いオプション名のサポートを検討する必要があるほどプログラムが複雑であることを示しています。残念ながら、これを行うための標準関数はありませんが、GNU libc には 2 つgetopt_longあり、さらに強力なargp. ソフトウェアが GPL 互換であれば、どちらもgnulibから入手でき、glibc に依存する必要はありません。

于 2013-09-21T19:39:07.373 に答える