用C语言模拟C++的异常处理机制
作者:网络转载 发布时间:[ 2012/11/20 9:38:04 ] 推荐标签:
这个设计的程序有一个很大的问题,那是它只能在同级的函数下使用try。
这是什么意思呢?如果我需要这样使用:
Int main()
{
Try
{
f();
}
catch(err)
{
printf(“%d”, err);
}
}
Void f()
{
G();
// some codes follows
}
Void g()
{
Throw(3);
}
在g()throw出异常3的时候,main函数没有办法直接捕捉,而是必须在f()函数下面继续执行后面的语句。是这套设计的机制多个嵌套的函数是没有办法实施的。
那么还有什么办法可以解决这个问题呢?Goto可以吗?不可以,goto也只能在同级的函数下使用。goto是本地的:它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意地点。
后找到一个方法:
#include
int setjmp(jmp_buf env)
Returns: 0 if called directly, nonzero if returning from a call to longjmp.
void longjmp(jmp_buf env, int val);
setjmp 和longjmp这2个函数可以在不同的函数进行跳转,只要设置他们的上下文,在用longjmp跳转到这设置好的上下文当中可以了!!
这2个函数的使用方法:
#include
#include
jmp_buf ebuf;
void f2(void);
int main(void)
{
int i;
printf(“1”);
i=setjmp(ebuf);
if(i==0)
{
f2();
printf(“This will not be printed.”);
}
printf(“%d”,i);
return 0;
}
void f2(void)
{
printf(“2”);
longjmp(ebuf,3);
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11