#include <stdio.h>#include <stdlib.h>void *apply(void *callee, int argc, void *argv) { void **as = (void**)argv; void *(*f)(void *a,...) = (void *(*)(void *a, ...))callee; switch(argc) { case 0: return ((void* (*)())f)(); case 1: return f(as[0]); case 2: return f(as[0], as[1]); case 3: return f(as[0], as[1], as[2]); case 4: return f(as[0], as[1], as[2], as[3]); default: printf("apply: number of arguments limit reached\n"); abort(); }}int main(int argc, char **argv) { char *as[] = {"hello %s\n" , "world"}; apply(printf, 2, as); return 0;}
struct mydik{ void (*f)(void);};struct mydik *shit = dlsym (a, b));mydik->f ();