Подтвердить что ты не робот

Опционные парсеры для C/С++?

Возможный дубликат:
Какие библиотеки парсеров для языка существуют для С++?

Я сделал несколько поисков, и есть много библиотек для синтаксического анализа параметров командной строки, но их трудно отличить. Кто-нибудь имеет какой-либо опыт с любым из них? Является ли один труднее/лучше/быстрее/проще/независимо от любого другого? Или я должен просто вырастить свой собственный?

4b9b3361

Ответ 1

Если вы хотите что-то полностью кросс-платформенное, я обнаружил, что библиотека Boost:: Program_Options является очень хорошей. Там есть что-то из кривой обучения, чтобы настроить его, но как только вы овладеете этим, это значительно упростит ситуацию.

Ответ 2

Для многих целей функции GNU getopt() и getopt_long() являются хорошим выбором.

GNU getopt() предназначен для однобуквенных опционных аргументов и достаточно хорош для стандартного поведения POSIX, и его можно убедить вести себя более ортодоксально, установив переменную окружения POSIXLY_CORRECT. Разница в том, что GNU getopt() распознает аргументы опций после первого аргумента без опционов и переставляет аргументы таким образом, чтобы все аргументы параметров обрабатывались до любого из аргументов без параметра. Это иногда имеет значение - хотя контексты, как правило, немного эзотеричны. Есть еще несколько дополнительных трюков.

GNU getopt_long() - лучший механизм для работы с длинными опциями, такими как --help. Он может обрабатывать необязательные аргументы, сопоставляя однобуквенные параметры и всевозможные вещи.

Существует множество других доступных пакетов, которые обрабатывают параметры различными способами.

(Perl имеет множество модулей Getopt, отражающих, сколько усилий было сделано за эти годы.)

Вы можете найти полезную дополнительную информацию в Что такое общий синтаксис команды оболочки Unix. Вы также можете прочитать спецификацию POSIX для условных обозначений командной строки в главе

Ответ 3

boost:: program_options довольно хорош и имеет хороший интерфейс С++, который может проверить, что параметры параметра имеют определенный тип (например, 'int ') и хранить их непосредственно в переменных.

Он также поддерживает загрузку "опций" из файла конфигурации, поэтому вы бесплатно получаете синтаксический файл конфигурационного файла. Таким образом, вы можете очень легко переопределить все параметры конфигурации из командной строки или добавить все параметры командной строки в файл конфигурации, что делает его очень гибким.

Ответ 4

также есть popt.

Ответ 5

если вы используете linux/unix, тогда getopt - это парсер параметров для вас. работает практически со всеми вкусами unix и прост в использовании

Ответ 6

Я использую системную реализацию getopt_long() для большинства вещей, однако вам может потребоваться быть более переносимым, что запрещает использование таких удобств для существ POSIX.

Вот стандарт в отношении представления POSIX параметров командной строки, если вы находитесь в позиции, где getopt()/getopt_long() просто недоступны и вам нужно сворачивать свои собственные. Вам также может понадобиться посмотреть, что POSIX может сказать о сводных показаниях справки/опции (я не могу найти ссылку на эту часть стандарта вне руки).

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