3

次のコードは、「5」を出力するだけです

#include <iostream>
#include <setjmp.h>

static jmp_buf buf;

float funcB()
{
    setjmp(buf);
    return 1.6f;
}

int funcA()
{
    longjmp(buf,5);
    std::cout<<"b";
    return 2;
}

int main()
{
    funcB();
    std::cout<<funcA();
}

しかし、setjmp はどちらの関数でもなく 5 を返すため、これは意味がありません... 心配しないでください。私はこのコードをどこでも使用していません。

4

3 に答える 3

1

longjmp を使用して、終了した関数に戻ることはできません。つまり、longjmp はスタックを復元しません。ここを参照してください。

必要なのは、この種のことを行うことが完全に正常なスキームのような言語です。

于 2013-11-29T16:18:30.427 に答える
0

使用しているコンパイラが何であれ、何と何をするかについて厳密な解釈を使用しているようsetjmpですlongjmp

このマクロは複数回返す場合があります。この場合、常にゼロを返します。情報を env に設定して longjmp を呼び出すと、マクロは再び戻ります。今回は、longjmp に渡された値が 0 以外の場合は 2 番目の引数として、0 の場合は 1 を返します。

ここから

UBなので、こんなこともできるし、ピザを注文したり、世界を終わらせたり……何でもいい。

于 2013-11-29T16:22:40.043 に答える