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;
    }
}

我希望能够对 case 'b' 使用 optarg,但如果没有选择任何内容来获取默认值。现在需要 arg 并且无法绕过它,如果我将“b:”替换为“b”,它会忽略该参数。

我怎样才能使它在这两种情况下都起作用?

4

1 回答 1

2

某些但不是所有版本都允许您通过在相关选项字符后放置getopt两个冒号来指示参数是可选的。

想要一个选项的可选参数表明您的程序足够复杂,您应该考虑支持长选项名称。不幸的是,没有标准的函数可以做到这一点,但 GNU libc 有两个:getopt_long而且更强大的argp. 如果你的软件是 GPL 兼容的,你可以从gnulib获得它们中的任何一个,然后你就不需要依赖 glibc。

于 2013-09-21T19:39:07.373 回答