На мой взгляд, обычно справедливы следующие вещи:
- Пользователи любят длинные, естественные языковые варианты, потому что их легко запомнить.
- Пользователи, которые пишут сценарии для переноса программ с сотнями параметров, любят короткие варианты.
Если программа становится достаточно большой, в конечном итоге у нее заканчиваются короткие комбинации опций, которые имеют какой-либо смысл по сравнению с канонической опцией. Например, -Z может совпадать с длинным параметром, который начинается с совершенно другой буквы. В этот момент, особенно для одного сопровождающего, код разбора опции становится головной болью для обслуживания.
У вас есть несколько вариантов, когда это произойдет:
- Используйте что-то вроде gengetopt , чтобы написать этот код для вас из шаблона
- Использовать только длинные опции (обычно плохая идея)
- Попробуйте сохранить в своей программе до 52 опций (a-z A-Z) (обычно плохая идея)
- Реализуйте опции, где короткие опции просто становятся переключателями, которые не принимают аргументов, используйте длинные опции для тех, которые делают
- Множество других методов, которые имеют смысл для вас и мало смысла для пользователей
Смешайся в разных местах, и ты действительно начинаешь понимать боль.
Когда я сажусь, чтобы написать инструмент, который принимает множество опций, первое, что я обычно делаю, это пишу код для разбора аргументов, это помогает планировать ход программы и становится наброском. Вы просто заставляете каждый вариант работать после этого.
Другими словами, если вы попадаете в точку, в которой варианты становятся такой хронической болью, это, как правило, указывает на программу, которая быстро эволюционировала за пределы ее планирования.
В любом случае, чтобы завершить мой длинный многоплановый ответ, обычно лучше по возможности придерживаться поведения compat getopt (). Код, который получает инструкции от пользователя - это всего лишь расходы на ведение бизнеса, поэтому вам следует полностью задуматься о том, что делает его более удобным для пользователя, когда это возможно.