#include <stdio.h>
#include <setjmp.h>
jmp_buf env1;
int func(void);
int main(int argc, const char *argv[])
{
int ret = 0;
printf("Before setjmp.\n");
// 保存當前的環境變量,longjmp 依賴此環境變量進行跳轉
// 此函數的返回值,非跳轉時,返回值為0,當對方跳轉來,
// 返回值為longjmp的參數
ret = setjmp(env1);
if(ret == 0)
{
func();
}
else
{
printf("+++++++++, ret = %d\n", ret);
}
printf("After setjmp.\n");
return 0;
}
int func(void)
{
printf("In func.\n");
//完成程序的跳轉,具有全局的作用范圍,函數之間,文件之間,線程與線程之間
longjmp(env1, 3);
return 0;
}