Создания таблицы переходов на языки си
Есть набор функций примерно 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]();
}