WTo*_*Toa 6 c arguments getopt
我目前的代码如下所示:
while (( flags = getopt(argc, argv, "abc")) != -1){
switch(flags){
case 'a':
dflag = 1;
break;
case 'b':
rflag = 1;
break;
case 'c':
cflag = 1;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我想包括像testprogram -c -d 1这样的东西
其中c需要处理-d,没有-c,testprogram -d 1将只运行不带参数.
我尝试了各种各样的东西,我似乎无法让这个工作.
任何帮助,将不胜感激.
我认为您有两种选择,其中一种可行,另一种可能有效,也可能无效。
“可能有效或无效”选项的示例如下:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定是否有什么禁止您在连续调用 [ 时更改有效选项列表getopt()][1],但我确实知道通常不会在您进行时更改选项。所以,要谨慎对待。请注意,如果-c从未找到该选项,则永远不会返回 的opt值,因此代码将不会执行。请注意,如果用户在 之前输入选项,则在处理 时将报告无效选项。您可以控制错误报告;你可能不得不这样做。(该变量包含被视为无效的实际选项字母。)dgetopt()-d-cgetopt()-doptopt
“将起作用”选项是:
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;
}
}
Run Code Online (Sandbox Code Playgroud)