#define CGOTO(label) { _dispatch = (label); goto _dispatcher; }
#define BEGIN_CGOTO int _dispatch=-1; _dispatcher: switch (_dispatch) { case -1:;
#define END_CGOTO }
int main() {
enum { a, b, end };
static int states[] = { a, b, a, end };
int i = 0;
BEGIN_CGOTO
CGOTO(states[i++]);
case a:
printf("a\n");
CGOTO(states[i++]);
case b:
printf("b\n");
CGOTO(states[i++]);
case end:;
END_CGOTO
}