Я знаю следующее:
- Достопочтенный
getopt(3)
- Расширенный
getopt_long
- парсер glibc
argp
для векторов аргументов в стиле Unix - popt из проекта GNOME (или его духовного наследника в Glib)
Я уверен, что есть еще то, чего я не использовал или даже не слышал; быстрый поиск в Google показывает Gopt, argtable и Optlist.
Лично мне argp
всего нравится argp
, и каждая программа, которую я написал с использованием getopt
/getopt_long
(за пределами определенного базового уровня сложности), была преобразована в argp
. Он более широко доступен, чем popt
, более мощный, чем getopt_long
, хорошо документирован, совместим со всеми соглашениями в стиле GNU и очень гибок. С другой стороны, его далеко не так просто использовать (благодаря его гибкости), а код для его поддержки довольно многословен (как и многие другие вещи в C).
Что вы используете и почему?
Да, я имею в виду C, а не C++. Существует множество парсеров C++, но я не использую C++.
Джон Милликин отмечает, что popt
больше не поддерживается. Я перечисляю это, потому что много программ все еще используют это - включая AbiWord, rpm, rsync и samba - несмотря на усилия Gnome по миграции. Но я также добавил ссылку на анализатор аргументов Glib.
Для разбора аргумента C++ см. Вопрос Какие библиотеки синтаксического анализатора параметров существуют для C++?