標準Cライブラリ

非局所分岐 <setjmp.h>

関数外へ分岐できます。これは同一関数内の分岐に制限される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();
}
複数の技術系サイトから、まとめて検索