Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Какую библиотеку парсинга командной строки посоветовать студенту, разрабатывающему консольную программу для своей научной задачи?

ТехнологииПрограммирование
Andrei Vukolov
  · 799
Пользователь старого TheQuestion  · 15 янв 2016

В C++11 существует два стандартизированных вида точки входа main, в первом из них в качестве аргументов передается `int argc` (количество аргументов) и `char* argv[]` (массив указателей на аргументы в памяти), есть и платформозависимые способы получить эти данные. Опции можно легко прочитать в цикле for, пробежав от 0 до `argc-1` по `argv`.

Для большей надежности и экономии времени можно научиться работать с одной из популярных библиотек для разбора (parsing) сложной командной строки на параметры и значения. Например в ней можно задавать значения параметров в нестандартном порядке (используя имена опций=значения). Для этого нужно "определить" поддерживаемые опции и затем передать в парсер те самые argc и argv.

Для C++, самый простой путь в использовании Boost::program_options, особенно если ваш проект использует Boost, хоть на первый взгляд это может показаться муторным. Примеры кода и использования этого решения есть в официальной документации. Плюсы этого варианта в возможности автоматического определения вывода команды "help" согласно определенным в коде опциям, поддержка Unicode а так же понятный код. Минусы: большой оверхед самого буста.

Примеры boost командной строки есть мане, но еще надо отметить что поддерживаются собственные реализации парсера опции, например вот так

Другой вариант, который для меня более предпочтителен - это использование GFlags, он так же работает с environment variables помимо самой командной строки. По ссылке информации будет предостаточно. К минусам этой библиотеки можно отнести использование макросов (что всегда путает джуниоров) и построение через CMake по той же причине.

Но самое полезное это инструменты из GNU libc (хотя их можно скачать и использовать и на других компиляторах). Для этого вам предлагаются Getopt и Argparse, см. gnu.org

Три варианта позволяют работать с Unix-like командной строкой. Некоторые программисты, однако, фанатеют от старинного стиля Windows, каким, например, обладает CMD .exe. Тут проще, можно самому уложиться в 100 строк собственного парсера (если не 20).

Если советовать джуниору или студенту, я бы посоветовал (из перечисленных вариантов) использовать упомянутые Сишные библиотеки GNU. Если хочется именно pure-cpp, подключить boost к своему проекту, хоть это и неоптимальное решение ради такой мелочи. И лишь потом советую gflags. В конце концов, если аргументов реально много, целесобразнее использовать файл конфигурации в своей программе.

Я надеюсь я наглядно продемонстрировал, как на TheQuestion срочно нужен "markup"

Благодарю! Помогу моему студенту инсталлить и использовать GNUсные инструменты, пусть лучше сразу прочувствует... Читать дальше