我有一个程序需要接收不同的命令行参数。为了简化问题,我们假设它接收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;
}
}
注意:在flag后面加上参数a和b。
但是如果我以以下方式调用程序,会遇到问题:
./myprog -a -b parameterForB
如果我忘记了parameterForA参数,那么parameterForA(由optarg表示)将返回-b
,parameterForB被视为没有参数的选项,并且optind设置为parameterForB在argv中的索引。
在这种情况下期望的行为是,在找不到-a
的参数时返回':'
,并且将Missing option.
打印到标准错误输出。但是,只有在-a
是传递给程序的最后一个参数时才会发生这种情况。
我猜问题是:有没有办法让getopt()
假定没有选项以-
开头?
my_prog -x-a
) - Potatoswatter