setjmp()函数用于非局部转移进程,设置缓冲区来保存系统堆栈的内容。
setjmp()函数 语法
int setjmp(jmp_buf jmp);
参数jmp为jmp_buf结构体变量,用于保存当前的环境信息。
setjmp()函数返回两个不同值:当第一次直接调用时,返回值为0;当从longjmp函数返回时,返回值为longjmp函数的第二个参数的值,即retval值。
setjmp()函数 示例
本示例使用setjmp函数将当前系统堆栈信息保存在变量buf中,为longjmp设置跳转点。其具体代码如下所示:
#include<setjmp.h>
#include<stdio.h>
#include<stdlib.h>
jmp_buf buf;
int main(void)
{
int b=3;
if(setjmp(buf)!=0)/*根据判断堆栈内容输出信息*/
{
printf("b=%d ",b);
exit(b);/*退出程序*/
}
b=5;
printf("b=%d ",b);/*输出b值*/
longjmp(buf,1);/*跳转到setjmp语句处*/
return 0;
}
运行程序,首先setjmp执行,返回0,接着调用longjmp,跳转到setjmp并执行,返回值为1。执行结果如图所示。