我们学过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环境高级编程