Создания таблицы переходов на языки си

Есть набор функций примерно 100 шт. Каждая функция имеет свою мнемонику. Грубо говоря функция void ADD(void) имеет мнемонику 0x00, void cos(void)0x10, и так далее.

Цель всея деяния, создание переходов между исполняемым файлом в котором прописаны все основные мнемоники функций и вызовом функций исполнителей.

Городить через

switch () {
    case
}

можно, но это сложно. Охота сделать таблицу переходов? Чтобы можно было связать мнемоники с функциями, и вызывать функцию по коду мнемоники.


Ответы (1 шт):

Автор решения: Harry

Что-то такое годится?

typedef void (*func)(void);

typedef struct _Func {
    int code;
    func f;
} Func;

Func fn[] = {{0,ADD}, {0x10,cos}};

void call(int code)
{
    for(int i = 0; i < sizeof(fn)/sizeof(fn[0]); ++i)
        if (fn[i].code == code) { fn[i].f(); break; }
}

Если диапазон кодов небольшой...

typedef void (*func)(void);

func fn[] = { ADD, // Для 0
              NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
              NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
              cos // Для 0x10
             }

// Или, с С99 (спасибо eanmos):
// func fn[] = { [0] = ADD, [0x10] = cos };

void call(int code)
{
    if (fn[code]) fn[code]();
}
→ Ссылка