getopt_long()/getopt() с дублированным вводом опций

Я только что узнал обе функции. Были поиск в Интернете, чтобы узнать их использование. Нашел одну вещь, которая очень важна для разбора ввода параметров командной строки, но не обсуждается.

В таком случае, если вводятся дублирующиеся параметры, обе функции ничего не могут с этим сделать. Мне было интересно, есть ли для этого какая-либо функция lib.

Если мне придется справиться с этим самой. Способ, на мой взгляд, состоит в том, чтобы собрать короткий вариант в массив и найти идентичные в массиве.

Есть ли лучший способ сделать это?


person tao    schedule 30.11.2010    source источник


Ответы (1)


Если вы хотите сделать что-то особенное с повторяющимися параметрами, вы можете управлять состоянием в коде обработки параметров.

Что-то вроде -v|--verbose можно повторить для дополнительной детализации, а код обработки многословности

// initialize
int verbose_level=0

// in the getopt case for -v
  verbose_level++;

(для опций, которые могут повторяться с аргументами, которые должны использоваться все, загрузите список или что-то в этом роде).

Если вы не хотите, чтобы повторы делали что-то особенное, просто устанавливайте значение каждый раз

  // in the case
  verbose_level = 1;

и если вы хотите обнаружить повторы

  // in the case
  if (verbose_level) {
   // handle this case as an error...
}
person dmckee --- ex-moderator kitten    schedule 30.11.2010
comment
Я имел в виду, что если ввести команду следующим образом: › Appexec.exe --same-option --same-option. Таким образом, в этом случае обработка параметров должна показывать пользователю информацию об ошибке и завершаться. Я думаю, что нет такого API-интерфейса lib для обработки этого случая. Это надо делать самому. - person tao; 30.11.2010