原创代码,不足之处请见凉
- C/C++ code
/*error.h*/ #ifndef _ERROR_H #define _ERROR_H #include <setjmp.h> #include <string.h> #define TRY ErrNum = setjmp(Resume);if(0 == ErrNum) #define CATCH(n) else if((0 != ErrNum) && (((n) == ErrNum) || ((n) == ALL_ERROR))) #define THROW(n) longjmp((Resume),(n)) #define GET_ErrorString(n) errString[n] typedef enum { ERROR_NONE, ERROR_TEST, MEMORY_OFFER, DIVSION_BY_ZERO, OUT_OF_RUN, /* 加入其它的错误号 */ ALL_ERROR, }ERROR_E; const char* errString[]= { "", "Error Test", "Not enough memory", "Divsion by zero", "Out of run", /* 加入错误号所对应的错误信息 */ }; int ErrNum = 0; jmp_buf Resume = {0}; #endif /*_ERROR_H*/ /*main.c*/ #include <stdio.h> #include <stdlib.h> #include "error.h" extern int ErrNum; int main(void) { int n = 0; printf("Input N:"); scanf("%d",&n); TRY { int j = 0; if(0 >= n) { THROW(ERROR_TEST); } else if(n > 0 ) { printf("N is:%d\n",n); } while (1) { j++; if(j > 100000) THROW(OUT_OF_RUN); } } CATCH(ALL_ERROR) { printf("%s,ErrNum:%d!\n",GET_ErrorString(ErrNum),ErrNum); exit(ErrNum); } }
1.输入小于等于0的值
Input N:0
Error Test,ErrNum:1!
2.输入大于0的值
Input N:1
N is:1
Out of run,ErrNum:4!
注意:上面的.h文件是C中TRY...CATCH的实现,main函数是TRY...CATCY的一个例子
------解决方案--------------------
见者...
------解决方案--------------------
.
------解决方案--------------------
学习了。
------解决方案--------------------
学习
------解决方案--------------------
不错
------解决方案--------------------
先见下
------解决方案--------------------
------解决方案--------------------
似乎还不支持嵌套啊...
这篇文章讲得相当详细~ http://blog.csdn.net/hbaizj/archive/2009/03/20/4008126.aspx
------解决方案--------------------
这个我记得在C陷阱里有说吧,你可以参考一下里面的内容
------解决方案--------------------
想法很新,感觉意思不大。
Exception Handle其实是很复杂的机制,很多问题都不好解决,
1. 存储空间的释放
2. 变量作用域的控制
3. Error Stack的管理
LZ这样写的TRY ... CATCH,感觉有很多使用约定在里面,如果应用在项目中,member使用不当
将会变成灾难。
不过作为研究讨论的话题,还是可以的。
------解决方案--------------------
感觉setjump很遥远,linux/unix下用的比较多吧,windows下用seh
------解决方案--------------------
------解决方案--------------------
不知道楼主到底要干嘛。。。
实现这样的逻辑一定要用longjump吗??????????
------解决方案--------------------
这种局部跳转用goto也可以呀
------解决方案--------------------