#include int (*state)(typeof(state)); int sm_first(state_t *state); int sm_second(state_t *state); int sm_third(state_t *state); int sm_done(state_t *state); int sm_first(state_t *state) { printf("first\n"); *state = &sm_second; return 1; } int sm_second(state_t *state) { *state = &sm_third; printf("second\n"); return 1; } int sm_third(state_t *state) { *state = &sm_done; printf("third\n"); return 1; } int sm_done(state_t *state) { printf("done\n"); return 0; } int main() { state_t state = sm_first; while (state(&state)); return 0; }