为什么 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;
}
我除了代码会从 main 来回跳转到函数并每次返回打印增加的数字。
实际发生的是它打印0
然后1
无限次。就好像当它跳回函数时,堆栈被重置为默认值。为什么这样做?有什么办法可以让它保存堆栈吗?
我知道setjmp
并且在编码风格和可读代码longjmp
方面甚至比goto
它更糟糕,但我现在正在试验,这段代码可能永远不会看到可用应用程序的光芒。