Просьба привести несколько примеров использования таблицы перехода. Я видел этот пример на википедии:примеры примеров перехода в C
#include <stdio.h>
#include <stdlib.h>
typedef void (*Handler)(void); /* A pointer to a handler function */
/* The functions */
void func3 (void) { printf("3\n"); }
void func2 (void) { printf("2\n"); }
void func1 (void) { printf("1\n"); }
void func0 (void) { printf("0\n"); }
Handler jump_table[4] = {func0, func1, func2, func3};
int main (int argc, char **argv) {
int value;
/* Convert first argument to 0-3 integer (Hash) */
value = atoi(argv[1]) % 4;
if (value < 0) {
value *= -1;
}
/* Call appropriate function (func0 thru func3) */
jump_table[value]();
}
Но мне было интересно, если есть альтернативный способ вызова функции вместо того, чтобы использовать индекс, как показано в приведенном выше случае jump_table[value]();
То, что я хочу для достижения этого вместо использования индекса есть способ использовать имя самой функции.
Например, у нас есть все указатели на функции в структуре.
typedef struct _funcptrs
{
void func1();
void func2();
} funcptrs;
и теперь, когда я хочу, чтобы вызвать функцию я могу сделать что-то вроде funcptrs.func1()
?
«используя индекс, есть способ использовать имя самой функции». То, что вы ищете, - это язык более высокого уровня или хеш-таблица. Хэш-таблица будет указателем на строку ->. – Corbin
Если вы хотите позвонить с именем самой функции, то зачем вам в первую очередь нужна таблица перехода? –
Я действительно не читал ваш последний пример, и теперь, когда я только что сделал, я считаю, что @PavanManjunath имеет смысл. Что именно ты пытаешься сделать? Я предположил, что вы хотите взять char * и вызвать функцию, основанную на ней. Как и в PHP вы можете делать $ func = "strtolower"; echo $ func ('CORBIN') ;. – Corbin