【发布时间】:2011-01-14 05:49:34
【问题描述】:
我有一个接受各种命令行参数的程序。为了简单起见,我们说它需要 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() 假定没有选项将以- 开头?
【问题讨论】: