Взгляните на getopt_long . Его часть стандартной библиотеки C. Для полной документации о том, как программы на C должны обрабатывать аргументы стандартным способом UNIX, проверьте это .
Вышесказанное должно дать вам аргумент. Но я вижу, что ваша проблема не только в этом. Работа с несколькими бэкэндами может быть сделана так:
struct cmds {
char *name;
void (*cmd)(int argc, char **argv);
};
Вы можете объявить cmd_table следующим образом:
struct cmds cmd_table[] = {
{ "backend1", backend1_exec },
{ "backend2", backend2_exec },
...
};
backend1_exec()
и backend2_exec()
- это просто функции, которые действительно выполняют основную работу по выполнению настоящего бэкэнда для вас.
Затем в вашей функции main()
просто зациклите записи, сравнивая каждую запись в cmd_table
с аргументом, а затем вызывайте соответствующую внутреннюю функцию следующим образом:
if (strcmp(cmdname, cmd_table[i].name)) {
*(cmd_table[i].cmd)(argc, argv);
}
Да, нет ничего плохого в использовании strcmp()
, если вы только что получили 10 записей в таблице. Это не критичный к производительности раздел вашей программы, так что я бы не стал сильно беспокоиться об этом. Этот метод является популярным способом справиться с этим, как я уже видел (это не делает его авторитетным, но может помочь вам заверить, что вы не делаете ничего плохого).