使用getopt获取所需的参数

时间:2012-10-20 05:23:01

标签: 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;
    }
}

问题是我想要包括像testprogram -c -d 1

这样的东西

如果需要c来处理-d,没有-c,testprogram -d 1就会在没有参数的情况下运行。

我尝试了各种各样的东西,但我似乎无法让它发挥作用。

任何帮助都将不胜感激。

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