無闇な cast は避けるべき

下のと同じ記事だが。

void *list[] = {write_cat, write_dog};
void *function;
function = list[valur];
((void(*)(void))function)();

無闇な cast というか、無闇に void ポインタを使わないほうが良い。

void (*list[2])(void) = {write_cat, write_dog};
void (*function)(void);
function = list[value];
function();

まぁ、関数ポインタが絡んだ宣言は分かり難いことこの上ないので、通常は typedef するのが良い。

typedef void (*proc_t)(void);
proc_t list[2] = {write_cat, write_dog};
proc_t function = list[value];
function();