我目前的代码如下:
while (( flags = getopt(argc, argv, "abc")) != -1){
switch(flags){
case 'a':
dflag = 1;
break;
case 'b':
rflag = 1;
break;
case 'c':
cflag = 1;
break;
}
}
问题是我想要包括像testprogram -c -d 1
这样的东西如果需要c来处理-d,没有-c,testprogram -d 1就会在没有参数的情况下运行。
我尝试了各种各样的东西,但我似乎无法让它发挥作用。
任何帮助都将不胜感激。
答案 0 :(得分:4)
我认为您有两种选择,其中一种可行,其中一种可能有效或无效。
“可能或不可行”选项将以下列例子为例:
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
的{{1}}值,否则代码将不会被执行。请注意,如果用户在getopt()
之前输入-d
选项,则-c
会在处理getopt()
时报告无效选项。您可以控制错误报告;你可能不得不这样做。 (-d
变量包含遇到无效的实际选项字母。)
'将工作'选项是:
optopt