我有一个程序,它接受各种命令行参数。为了简化起见,我们会说,它需要3个标志,-a
,-b
和-c
,并使用下面的代码来分析我的论点:getopt无法检测到选项缺少的参数
int c;
while((c = getopt(argc, argv, ":a:b:c")) != EOF)
{
switch (c)
{
case 'a':
cout << optarg << endl;
break;
case 'b':
cout << optarg << endl;
break;
case ':':
cerr << "Missing option." << endl;
exit(1);
break;
}
}
注:该标志后,和b带参数。
但我遇到一个问题,如果我调用我的程序说与
./myprog -a -b parameterForB
,我忘了parameterForA的parameterForA(由OPTARG代表)返回为-b
和parameterForB被认为是不带参数的选项, optind被设置为argv中parameterForB的索引。
在这种情况下期望的行为将是':'
返回-a
未找到参数后Missing option.
打印到标准错误。但是,只有在-a
是传入程序的最后一个参数的情况下才会发生。
我想问题是:有没有办法使getopt()
假设没有选项将开始-
?
这实际上允许以'-'开头的参数 - 它们不能以空格开头。 (例如'my_prog -x-a') – Potatoswatter 2010-02-08 08:35:43