jmp_buf j;
void raise_exception(void)
{
printf("exception raised\n");
longjmp(j, 1);
printf("this line should never appear\n");
}
int main(void)
{
if(setjmp(j) == 0)
{
printf("\''setjmp\'' is initializing \''j\''\n");
raise_exception();
printf("this line should never appear\n");
}
else
{
printf("''setjmp'' was just jumped into\n");
}
return 0;
}
那个填充 jmp_buf 的函数不在调用 longjmp()之前返回。否则,存储在 jmp_buf 中的上下文
就有问题了:
jmp_buf j;
void f(void)
{
setjmp(j);