int setjmp (jmp_buf envbuf)- 必须在 longjmp 之前被调用
- 在 envbuf 中保存当前调用环境,供后续 longjmp 使用
- 被调用一次,返回多次
执行结果:
- 在 envbuf 中保存当前调用环境:包括寄存器、栈指针和程序计数器 (env 往往是全局变量)
- 返回 0
- 返回值不能给变量赋值:rc = setjmp(env);//Error
例子:
目标:从深层嵌套函数中直接返回
/* Deeply nested function foo */
void foo(void)
{
if (error1)
longjmp(buf, 1);
bar();
}
void bar(void)
{
if (error2)
longjmp(buf, 2);
}