getopt_long () / getopt () с дублированным вводом опций - PullRequest
2 голосов
/ 30 ноября 2010

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

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

Если я должен справиться с этим сам. На мой взгляд, я собираю короткие опции в массив и нахожу их в массиве.

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

1 Ответ

2 голосов
/ 30 ноября 2010

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

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

// initialize
int verbose_level=0

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

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

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

  // in the case
  verbose_level = 1;

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

  // in the case
  if (verbose_level) {
   // handle this case as an error...
}
...