背景知识
执行环境:CPU中的一些寄存器,保留了程序执行的必要信息
setjmp&longjmp
要实现执行环境的保存,我们可以选择把相关寄存器保存到jmp_buf中;然后在longjmp中从jmp_buf中恢复寄存器的值,恢复之后就回到了setjmp返回的地方
最简单的例子(用来做异常处理):
#include<bits/stdc++.h>
using namespace std;
;
jmp_buf env
int my_func(int a,int b){
if(b==0){
("divide by 0\n");
printf(env,1);
longjmp}
return a/b;
}
int main(){
int res=setjmp(env);
if(res==0){
("return from setjmp\n");
printf(10,0);
my_func}else{
("return from longjmp: %d\n",res);
printf}
return 0;
}