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