#include「setjmp.h」

这一篇暂时不掌握

#include<stdio.h>
#include<stdlib.h>
#include<setjmp.h>
/*
@作用:
	1:C语言中不能使用goto跳转到另一个函数中的具体某处;\
	但提供了两个函数——setjmp 和 longjmp可以提转到任意程序的任意位置
	2:通常作为异常处理机制!
@结构体jmp_buf
@setjmp()与longjmp()的使用 --> 
通俗解释:先调用setjmp(),set_buf记录当前的位置,\
再调用longjmp,返回envbuf所记录的位置\

//第一次setjmp()返回值=0
//第一次后的setimp()返回值 = longjmp(buf,参数2)的参数2

*/

//例:
jmp_buf buf; //创建jmp_buf结构体变量
void Func()
{
	if (setjmp(buf)!=0) //第一次入栈返回值为0;
	{
		printf("执行异常程序!\n");
		exit (0);
	}

}

void SETJMP()
{
	Func();  //主函数运行异常执行程序,保存执行程序SP等状态的堆栈

			 //正常执行程序
	printf("异常发生\n"); //如果程序发生了异常
	longjmp(buf, 1);      //异常执行程序出栈,跳转执行异常执行程序!
	//注意:用exit (0) 结束程序!
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值