setjmp がスタックを保存しないのはなぜですか?
次のコードを検討してください。
#include <iostream>
jmp_buf Buf;
jmp_buf Buf2;
void MyFunction()
{
for(int i = 0; i < 5; i++)
{
std::cout << i << std::endl;
if(!setjmp(Buf))
longjmp(Buf2, 1);
}
}
int main (int argc, const char * argv[])
{
while(true)
{
if(!setjmp(Buf2))
{
MyFunction();
break;
}
longjmp(Buf, 1);
}
return 0;
}
私が例外としているのは、コードがメインから関数に前後にジャンプし、毎回増加する数を逆に表示することです。
実際に起こることは、それが印刷0され、その後1無限に繰り返されることです。関数にジャンプして戻ると、スタックがデフォルトにリセットされるかのようです。なぜそれをしているのですか?スタックも保存する方法はありますか?コーディング スタイルや読み取り可能なコードに関しては、さらに悪いことは
わかっsetjmpていますが、現在実験中であり、このコードが使用可能なアプリケーションの光を見ることはおそらくないでしょう。longjmpgoto