void* program[2]; int counter = 0; #define DISPATCH(N) goto **(PC+=N) void foo (void** PC) { if (PC==0) { program[0] = && one; program[1] = && two; return; } DISPATCH(0); one: counter += 3; DISPATCH(1); two: counter += 5; DISPATCH(1); }