C标准库 setjmp函数

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。执行结果如图所示。

setjmp()函数

赞(1)
未经允许不得转载:极客笔记 » C标准库 setjmp函数
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址