头文件<setjmp.h>

头文件<setjmp.h>定义了宏setjmp,并且为了绕过正常的函数调用和返回规则声明了一个函数和一个类型。

1、类型jmp_buf

它是一个数组类型,适合存储恢复一个调用环境所需的信息。

2、宏setjmp

int setjmp(jmp_buf env);

说明:宏setjmp将它的调用环境保存在它的jmp_buf类型的参数中,以供后面longjmp使用。

返回值:如果返回一个来自直接的调用,则宏setjmp返回0;如果返回一个来自longjmp的调用,则宏setjmp返回一个非0值。

3、函数longjmp

void longjmp(jmp_buf enb,int val);

说明:函数longjmp使用jmp_buf参数来恢复宏setjmp最近一次调用保存的环境;如果没有这样的调用或包含宏setjmp调用的函数已经在其前终止执行,则行为未定义。

返回值:在longjmp完成之后,程序会继续执行。函数longjmp不能让宏setjmp返回0,如果val是0,则宏setjmp返回1。

例:

#include <setjmp.h>
#include <stdio.h>

static jmp_buf buf;
void second();

void first()
{
printf("%c\n",buf[0]);  //
second();
printf("first function\n");  //不会执行
}

void second()
{
printf("second function\n");
longjmp(buf,3);  //跳到setjmp,并设置setjmp的返回值为3
}

void main()
{
if(!setjmp(buf))  //直接调用宏setjmp时返回0,并将执行环境保存在buf中
first();
else
printf("main function\n");
}

结果:

h
second function
main function

转载于:https://www.cnblogs.com/Mr-Wenyan/p/7219875.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值