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
先踩个点从这里准备逃跑
老孙去也
地球危险,还是回火星吧
你妹,让老子钻了狗洞,不过总算安全了