Разработка командной строки (CLI)
Программе на вход подается argv argc, мне нужно обрабатывать команды вида:
cmd cmd1 [cmd2 arg] [cmd3] [cmd4 arg]...
Текущая реализация работает только если опции в нужном порядке и заданы все опции, каким образом можно реализовать подобно утилитам в линуксе чтобы опции были опциональны и была возможность вызывать в разном порядке? Буду рад любым ссылкам, статьям, идеям. То что пока что пришло в голову это построить конечный автомат, но мне кажется есть какие то решения фреймворки для такой типовой задачи.
Ответы (1 шт):
пришло в голову построить конечный автомат
Этот конечный автомат уже сделан. Называется он getopt. Делаем man 3 getopt и читаем:
Функция getopt() разбирает аргументы командной строки. Ее аргументы argc и argv являются счетчиком и массивом аргументов, которые передаются функции main() при запуске программы. Элемент argv, начинающийся с "-" (и не являющийся "-" или "--"), считается опцией. Символы этого элемента (не считая начального "-") являются символами опций. При каждом повторном вызове getopt() возвращаются символы следующей опции.
Есть более продвинутый вариант этого автомата. Называется getopt_long()