C语言实现异常机制setjmp() longjmp()

  在C语言中,我们都知道goto语句可以用来实现循环,实质上就是一个局部跳转语句(同一个函数作用域内)。我们同样可以把它用于局部异常处理。

  那么如果要实现非局部跳转显然goto语句就无能为力了,所以在<setjmp.h>头文件中声明了setjmp()与setlong()函数用于实现非局部跳转,它允许立即从一个深层嵌套的函数调用中返回。

int setjmp(jmp_buf env);

 返回值:第一次调用返回0,其后返回longjmp中val的值

void longjmp(jmp_buf env,int val);

 调用次函数会调到setjmp()所在的地方,env同setjmp是一样的用以保存状态信息,val则是跳转到setjmp后我们自己规定的它的返回值。


有了这对函数,我们不仅可以实现非局部的跳转,还可以利用他们做C语言的异常处理。


实例代码:

#include<stdio.h>
#include<setjmp.h>
jmp_buf buffer;
int fun1(int a,int b)
{
 if (b == 0)
 {
  longjmp(buffer, 1);
 }
 return a / b;

  
  
}
int main(void) {  int a, b,rs;  printf("Pease input two number to except\n");  scanf("%d%d",&a,&b);  int r = setjmp(buffer);  if (r == 0)  {   rs = fun1(a, b);   printf("rs=%d\n",rs);  }    if (r == 1)  {   printf("Input error,Please do again\n");   scanf("%d%d", &a, &b);   rs = fun1(a, b);   printf("rs=%d\n", rs);  }  return 0; }

此代码用C语言处理了两数除加可能出现的异常,主函数中设置setjmp()接受异常并对异常做出处理,fun1()中,如果出现异常则用longjmp()跳转到主函数中去处理异常。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值