我有一个接受各种命令行参数的程序。为了简化起见,我们会说它需要 3 个标志,-a
,-b
和-c
,并使用以下代码来解析我的参数:
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;
}
}
注意:a 和 b 在标志之后带参数。
但是如果我调用我的程序说我会遇到一个问题
./myprog -a -b parameterForB
其中我忘记了 parameterForA,parameterForA(由 optarg 表示)返回为-b
并且 parameterForB 被认为是没有参数的选项,并且 optind 设置为 argv 中 parameterForB 的索引。
在这种情况下,期望的行为':'
是在没有找到 参数后返回-a
,并Missing option.
打印到标准错误。但是,这只发生在-a
传递给程序的最后一个参数的事件中。
我想问题是:有没有办法getopt()
假设没有选项将以 开头-
?