程序跳轉(zhuǎn)之longjmp
時間:2018-09-29 來源:未知
#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");
// 保存當前的環(huán)境變量,longjmp 依賴此環(huán)境變量進行跳轉(zhuǎn)
// 此函數(shù)的返回值,非跳轉(zhuǎn)時,返回值為0,當對方跳轉(zhuǎn)來,
// 返回值為longjmp的參數(shù)
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");
//完成程序的跳轉(zhuǎn),具有全局的作用范圍,函數(shù)之間,文件之間,線程與線程之間
longjmp(env1, 3);
return 0;
}

