}
int main(void)
{
f();
longjmp(j, 1);
return 0;
}
所以,你必须把 setjmp()处理成只是到其所在位置的一个非局部跳转。
Longjmp()和 setjmp()联合体运行于异常生命期的 2 和 3 阶段。longjmp(j,r)产生异常对象 r
(一个整数),并且作为返回值传送到 setjmp(j)处。实际上,setjmp()函数通报了异常 r。
下面这个例子采用 switch,能更好的展现这对函数的功能:
#include
#include
jmp_buf j;
void raise_exception(void)
{
printf("exception raised\n");
longjmp(j, 3);
printf("this line should never appear\n");
}
int main(void)
{
switch (setjmp(j))
{
case 0:
printf("''setjmp'' is initializing ''j''\n");
raise_exception();
printf("this line should never appear\n");
case 1: