我们学过C语言中的goto,只能当前函数里面跳转是不能跨越函数的。setjmp和longjmp却可以跨越函数跳转。

#include <stdio.h>
#include <setjmp.h>


void f1(void);
jmp_buf jmpbuffer;

int main(void)
{   
   if(setjmp(jmpbuffer)!=0)
   {
      printf("jmp\n");
      return 0;
   }

   f1();  

   return 0;
}

void f1()
{
   longjmp(jmpbuffer,1);
}

编译运行,打印:jmp

函数从if里面返回了,则证明能跨函数跳转,其应用于在深层嵌套调用中错误的情况。


参考资料:unix环境高级编程