Выключить сокращение в getopt_long (optarg.h)? - PullRequest
3 голосов
/ 03 марта 2011

Можно ли отключить сокращение в getopt_long()? Со страницы руководства:

Длинные имена опций могут быть сокращены, если аббревиатура уникальна или является точным соответствием> некоторой определенной опции.

Я хочу сделать это, потому что спецификация, которую я получил для фрагмента кода, требует полноразмерного точного соответствия флагов, и есть много флагов.

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

Codeape,

Похоже, что нет способа отключить функцию сокращения. Вы не одиноки в желании этой функции. Смотри: http://sourceware.org/bugzilla/show_bug.cgi?id=6863

К сожалению, похоже, разработчики glibc не хотят использовать эту опцию, так как вышеупомянутый отчет об ошибке был исправлен с помощью "WONTFIX". Вам может не повезти здесь: - \

2 голосов
/ 03 марта 2011

Если вы используете argp_parse () вместо getopt () (настоятельно рекомендуется, BTW), вы можете получить доступ к точному флагу, введенному пользователем через

state->argv[ state->next - 2 ]

Это немного хак, но стоитработа.

1 голос
/ 26 октября 2016

Это не идеальное решение, но вы можете проверить точный аргумент, заданный пользователем после вызова getopt_long () (обычно внутри switch), как показано ниже:

if (strcmp(argv[optind-1], "--longoption") == 0)

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

...