我认为您有两种选择,一种可行,另一种可能可行,也可能不可行。
“可能工作或可能不工作”选项将通过以下方式举例说明:
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
将永远不会返回getopt()
,因此不会执行其他代码。请注意,如果用户-d
在 之前输入了一个选项-c
,getopt()
则在处理 时会报告一个无效选项-d
。您可以控制错误报告;你可能不得不这样做。(该optopt
变量包含实际遇到的无效选项字母。)
“将工作”选项是:
while ((opt = getopt(argc, argv, "abcd:")) != -1)
{
switch (opt)
{
case 'a':
aflag = 1;
break;
case 'b':
bflag = 1;
break;
case 'c':
cflag = 1;
break;
case 'd':
if (cflag == 0)
...report error about must use -c option before -d option...
dflag = 1;
dvalue = optarg;
break;
default:
...error handling...
break;
}
}