我有以下代码:
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;
}
}
我希望能够将optarg用于案例'b',但是如果没有选择获取默认值。现在需要arg并且不能绕过它,如果我用“b”替换“b:”它会忽略参数。
如何在两种情况下都能正常工作?
答案 0 :(得分:2)
Some but not all versions of getopt
允许您通过在相关选项字符后添加两个冒号来指示参数是可选的。
想要选项的可选参数表明您的程序足够复杂,您应该考虑支持长选项名称。不幸的是,没有标准的功能可以做到这一点,但GNU libc有两个:getopt_long
和更强大的argp
。如果您的软件与GPL兼容,您可以从gnulib获取其中任何一个,然后您就不依赖于glibc。