1、示例代码
#include
#include
int main()
{
jmp_buf j;//保存当前环境
if(setjmp(j) == 0)
{
printf("setjmp初始化\n");
longjmp(j,1);
printf("不会执行这句话\n");
}
else
{
printf("这句会输出\n");
}
return 0;
}
2、使用setjmp和longjmp写个死循环
#include <stdio.h>
#include <setjmp.h>
int main()
{
jmp_buf j;
setjmp(j);
printf("不停输出这句话\n");
longjmp(j,0);
return 0;
}
3、稍加解释
setjmp()将当前程序栈环境变量保存在jmp_buf类型的j中。
longjmp(j,value)恢复jmp_buf保存的环境(即跳转到最近一次使用setjmp的地方)。
setjmp第一次调用返回值为0。
当使用longjmp后,再次调用setjmp返回值为value。