関数外へ分岐できます。これは同一関数内の分岐に制限されるgotoを拡張したものです。
#include <setjmp.h> jmp_buf buf; void Func() { longjmp(buf, 2); // setjmp()の戻り値を2として、その位置へ戻る } void Main() { int val = setjmp(buf); switch (val) { case 0: // 初回の呼び出し時は、ここに来る break; case 1: return; case 2: // longjmp()の呼び出し後は、ここに来る return; } Func(); }