>>20
yeah, if you are going to store pointers to functions that have varrying call signatures or return types, then you might want to use a structure instead:
struct my_awesome_function_table {
void (*blah)(int x);
void (*meep)(int k, int f, char e);
void (*meta)(struct my_awesome_function_table* this, void* userdata);
};
But if you wanted to store them in an array, you could use an array of void pointers, and cast the pointer when you call the function it points to
int dicks(int c, char k) {
}
return (c & k) | (c & (k<<2));
int f() {
void* fn = dicks;
int c = ((int(*)(int,char))fn)(56, 'a');
return c;
}