Как я могу реализовать таблицу поиска функций на C?

#c #lookup-tables

#c #таблицы поиска

Вопрос:

Допустим, у меня была программа, в которой пользователь мог выбрать число от 0 до 10. Тогда каждое число будет соответствовать вызову определенной функции. В Python я знаю, что мог бы просто создать массив имен функций, индексировать его с помощью выбранной опции, а затем вызвать функцию. Как я могу реализовать это на C? Или это вообще возможно?

Комментарии:

1. Вы можете создать массив указателей на функции.

2. Указатели на функции поиска

Ответ №1:

Вот пример, как это сделать. Пожалуйста, обратите внимание, что все функции должны иметь одинаковую подпись, но, конечно, вы можете изменить ее с моего funptr типа, например, на функцию, которая void возвращает или принимает a char , а не два int s.

 // Declare the type of function pointers.
// Here a function that takes two ints and returns an int.
typedef int (*funptr)(int, int);

// These are the two functions that shall be callable.
int f1(int a, int b) { return a   b; }
int f2(int a, int b) { return a - b; }

// The array with all the functions.
funptr functions[] = {
    f1,
    f2,
};

// The caller.
int call(int i, int a, int b)
{
    return functions[i](a, b);
}
 

Комментарии:

1. И если вам понадобятся причудливые сигнатуры функций нескольких типов, тогда вы заставляете свои функции принимать структуры или указатели на структуры, которые определяют входные и выходные параметры и типы. Эти структуры в конечном итоге начинают описывать абстрактное синтаксическое дерево (AST).

Ответ №2:

Единственная проблема, которую я вижу в решении выше, заключается в том, что нет проверки индекса массива (у вас могут возникнуть некоторые сложные проблемы). Чтобы сделать код более надежным, вы можете добавить проверку индекса (границ), например

  • добавьте один оператор if внутри функции «call», где вы проверяете параметр i (не должен превышать максимальное значение)