У меня есть программа, которая принимает различные аргументы командной строки. Для упрощения мы скажем, что для анализа моих аргументов используются три флага -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
где я забыл параметрForA, параметрForA (представленный optarg) возвращается как -b
, а параметрForB считается опцией без параметра, а optind - индексом параметраForB в argv.
Желаемое поведение в этой ситуации будет состоять в том, что ':'
возвращается после того, как аргумент -a
не найден, и Missing option.
печатается со стандартной ошибкой. Однако это происходит только в том случае, если -a
является последним параметром, переданным в программу.
Я предполагаю, что вопрос: есть ли способ сделать getopt()
предположить, что никакие параметры не начинаются с -
?