#include #include #include typedef struct FUNC_WRAPPER { struct FUNC_WRAPPER *(*f)(struct FUNC_WRAPPER *); } FUNC_WRAPPER; FUNC_WRAPPER *myfunc3(FUNC_WRAPPER *p); FUNC_WRAPPER *myfunc2(FUNC_WRAPPER *p); FUNC_WRAPPER *myfunc1(FUNC_WRAPPER *p) { printf("myfunc1() got called.\n"); p->f = myfunc2; p->f(p); p->f = myfunc3; return p; } FUNC_WRAPPER *myfunc2(FUNC_WRAPPER *p) { printf("myfunc2() got called.\n"); p->f = myfunc3; p->f(p); p->f = NULL; return p; } FUNC_WRAPPER *myfunc3(FUNC_WRAPPER *p) { printf("myfunc3() got called.\n"); return p; } int main(void) { FUNC_WRAPPER p; p.f = myfunc1; p.f(&p); return EXIT_SUCCESS; }