В другом потоке мне сказали, что switch
может быть лучше, чем таблица поиска с точки зрения скорости и компактности.
Итак, я хотел бы понять различия между этим:
Таблица поиска
static void func1(){}
static void func2(){}
typedef enum
{
FUNC1,
FUNC2,
FUNC_COUNT
} state_e;
typedef void (*func_t)(void);
const func_t lookUpTable[FUNC_COUNT] =
{
[FUNC1] = &func1,
[FUNC2] = &func2
};
void fsm(state_e state)
{
if (state < FUNC_COUNT)
lookUpTable[state]();
else
;// Error handling
}
и это:
Переключатель
static void func1(){}
static void func2(){}
void fsm(int state)
{
switch(state)
{
case FUNC1: func1(); break;
case FUNC2: func2(); break;
default: ;// Error handling
}
}
Я думал, что таблица поиска была быстрее, поскольку компиляторы пытаются, по возможности, преобразовывать операторы switch в таблицы перехода. Поскольку это может быть неправильно, я хотел бы знать, почему!
Спасибо за вашу помощь!