UNIX笔记--(longjmp ,setjmp)异常处理

      JAVA语言的异常处理之强大确是让人叹服,编程序有种战战兢兢如履薄冰的感觉,很多地方要去try,try,恨之入骨。不过出了问题调试时又感恩戴德,玩笑话。这中异常机制是一种软件安全和鲁棒性的加强和提高。

     在UNIX也有提供,就是setjmp ,longjmp。goto语句可以实现跳转,但只限于本函数中,在函数间跳转就无能为力了。

     setjmp和longjmp的配合使用其实也很简单,就比方说你学校旁边苹果园的苹果熟了,还没人摘,坏了多浪费啊,本着这种勤俭节约的心态你要去摘满一登山包。但是毕竟这种高尚的出发点还是不为外人理解的,尤其是看果园的大狗。所以出发前你要踩个点,就是万一出现异常情况要从这里这跑出来,这就是setjmp。至于在你在何时何地准备跑出来就longjmp就好。看个例子:

#include <stdio.h>
#include <setjmp.h>
static jmp_buf jmpbuffer;

void danger(int sex)
{
   if(sex){
     printf("地球危险,还是回火星吧\n");
     longjmp(jmpbuffer,1);//”1“ 为回送给setjmp的返回值
   }
  
     printf("欢迎来到死亡之地,哈哈哈哈!");
    
   
}

safe()
{
   printf("先踩个点从这里准备逃跑\n");
   if(0 == setjmp(jmpbuffer)) //首次进入时,setjmp返回0,当从longjmp跳回来时,返回值为longjmp指定的值。
   {
     printf("老孙去也\n");
     danger(1);
   }
   printf("你妹,让老子钻了狗洞,不过总算安全了\n");
}

 

int  main(void)
{
  safe();
}

结果:

[root@localhost 1-1]# cc jump.c
[root@localhost 1-1]# ./a.out
先踩个点从这里准备逃跑
老孙去也
地球危险,还是回火星吧
你妹,让老子钻了狗洞,不过总算安全了



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值