@Catmengi
Юный человек который учит язык Си.

Как сделать вызов функции из терминала чтобы обработчик динамически искал и вызывал функцию?

Попытки поиска данного вопроса не выдали успеха (или я не умею гуглить).
Суть вопроса
У меня есть некии функции и обработчик терминала.
Мне надо чтобы обработчик вызывал функцию которую укажет пользователь тоесть обработчик динамически ищет и выполняет функцию (статически сделанный обработчик на if/else if мне не очень подходит)
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
обработчик динамически ищет и выполняет функцию

У этой задачи есть два больших класса решений -- системно-независимые и системно-зависимые, в зависимости от дополнительных условий. Для начала надо ответить на вопрос "где ищет". Если ответ на этот вопрос -- "в твоём приложении", а набор функций фиксированный, то можно построить отображение "имя функции" -> "адрес функции" с использованием какого-нибудь массива или хеш-таблицы и искать с его помощью.
Если набор функций не фиксирован во время сборки приложения, или искать надо за пределами приложения, нужно ответить ещё на один вопрос: "знают ли функции о том, что их будут выполнять или нет". Если знают -- опять же построить отображение "имя функции" -> "адрес функции" и каким-нибудь образом сделать его доступным приложению. Если речь идёт о вызове произвольных заранее неизвестных функций, остаётся вариант с динамической загрузкой и поиском имён -- dlopen/dlsym или LoadLibrary/GetProcAddress для венды.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
includedlibrary
@includedlibrary
Если я правильно понял, то подойдёт обычная хэш-таблица со строками в качестве ключей и указателями на функции в качестве значений. Когда пользователь делает ввод, вы ищете значение по ключу и вызываете найденную функцию, или возвращаете ошибку, если функция не найдена
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Такое связывание специфично для Java-фреймворков а не для языка С.

Я-бы предложил обсудить вопросы безопасности. Что будет если пользователь вызовет функцию которую ему нельзя вызывать? Как мы вообще ограничиваем пользователя? Стоит-ли такая гибкость получаемого удобства? Может лучше пойти классическим путем? Перечислить все возможные варианты действий явно и в switch-case обработать?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы