/* function declarations */
int func1(void*);
int func2(void*);
....
int funcn(void*);

/* table of names and pointers */
struct { /* description of a function: */
const char *name; /* externally-visible name */
int (*func)(void*); /* pointer to actual function */
} function[] = {
{ "Function 1", func1 },
{ "Function Two", func2 },
...
{ "Catered Function", funcn },
};

/* number of functions in table */
#define FUNCTIONS (sizeof function / sizeof function[0])

/* call a named function and return its value, or complain
* and return -42 if the function is unknown
*/
int call_named_func(const char *name, void *args) {
int i;
for (i = 0; i < FUNCTIONS; ++i) {
if (strcmp(name, function[i].name) == 0)
return function[i].func(args);
}
fprintf (stderr, "No such function: %s\n", name);
return -42;
}