ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

setjmp,longjmp

日経ソフトウェアの9月号を読んでいたら、C言語に関する連載記事でsetjmpとlongjmpの解説が。
存在自体は知っていたけど詳しくは知らなかった。

#include <setjmp.h> 

int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int val);

setjmpで現在の場所を記憶し、longjmpでその場所へ飛ぶ。

#include <setjmp.h> 

jmp_buf env;

void func()
{
    longjmp(env,1);
}

void main()
{
    if ( setjmp(env) == 0 )
    {
        func();
    }
    else
    {
        // longjmpで戻ってきたとき
    }
}

これはどう考えても危険だ。例外処理とかで使うと便利なんだろうけど、C++ではtry〜catchがあるからこれは使わないだろう。
これを使う必要がある場合は、組み込み系とかでハードに近くてCしか使えないような場合くらいしか思いつかない。
自分で使うとなにかしらミスしそうだ。あえてこれを使う必要はないだろう。
それでもこういうのがあるということは知っておくべきだ。