background image

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);