setjmp.h 头文件定义了宏 setjmp()、函数 longjmp() 和变量类型 jmp_buf,该变量类型会绕过正常的函数调用和返回规则。<setjmp.h> 是C 标准库中的一个头文件,提供了一组函数和宏,用于非本地跳转(即从一个函数跳转到另一个之前调用过的函数,而不需要正常的函数返回机制)。这种机制通常用于错误处理、异常处理...
jmp_buf是setjmp.h中定义的一个结构类型,其用于保存系统状态信息。宏函数setjmp会将其所在的程序点的系统状态信息保存到某个jmp_buf的结构变量env中,而调用函数longjmp会将宏函数setjmp保存在变量env中的系统状态信息进行恢复,于是系统就会跳转到setjmp()宏调用所在的程序点继续进行。这样setjmp/longjmp就实现了非局部跳...
jmp_buf jumper; intmdiv(inta,intb){ if(b ==0) {// can't divide by 0 longjmp(jumper,-3);//跳到以jumper 所在的jmp point,进行处理,-3 相当于具体的exception code. } returna / b; } intmain(){ intjstatus =setjmp(jumper);//相当于java catch,如果发生 jumper 异常,那么会跳回到这个jmp...
1. setjmp(j)设置“jump”点,用正确的程序上下文填充jmp_buf对象j。这个上下文包括程序存放位置、栈和框架指针,其它重要的寄存器和内存数据。当初始化完jump的上下文,setjmp函数返回0值。 2. 2.以后调用longjmp(j,r)的效果就是一个非局部的goto或“长跳转”到由j描述的上下文处(也就是到那原来设置j的setjmp函数...
#include<setjmp.h>intsetjmp(jmp_buf env); 参数 env:一个jmp_buf类型的变量,用于保存当前的程序执行状态。 返回值 如果setjmp()直接调用,返回值为 0。 如果setjmp()是通过longjmp()调用返回的,返回值是由longjmp()设置的非 0 值。 实例 下面的实例演示了 setjmp() 宏的用法。
intsetjmp(jmp_bufenv); setjmp 函数的功能是将函数在此处的上下文保存在 jmp_buf 结构体中,以供 longjmp 从此结构体中恢复。 参数env 即为保存上下文的 jmp_buf结构体变量; 如果直接调用该函数,返回值为 0; 若该函数从 longjmp 调用返回,返回值为非零,由longjmp函数提供。根据函数的返回值,我们就可以知道 set...
setjmp一般会创建本地的jmp_buf缓冲区并且初始化,用于将来跳转回此处。这个子程序保存程序的调用环境于env参数所指的缓冲区,env将被longjmp使用。如果是从setjmp直接调用返回,setjmp返回值为0。如果是从longjmp恢复的程序调用环境返回,setjmp返回非零值。 示例程序如下所示: ...
函数名: setjmp 头文件:<setjmp.h> 函数原型: int setjmp(jmp_buf env); 功能: 非局部转移进程,设置缓冲区来保存系统堆栈的内容 参数: env jmp_buf结构体变量,用于保存当前的环境信息 返回值: 第一次直接调用,返回0;当从longjmp函数返回时,返回longjmp函数的第二个参数的值 ...
int setjmp(jmp_buf env); 1. 2. setjmp函数的功能就是将函数在此处的上下文保存在jmp_buf结构体中,以供longjmp从此结构体中恢复。 env 即为保存函数上下文的jmp_buf结构体变量; 返回值:如果直接调用该函数,直接返回0;若该函数从longjmp调用返回,返回值为非零值,由longjmp传进来。根据函数的返回值,我们就可以判...