📄 except.h
字号:
/* $Id: except.h 6 2007-01-22 00:45:22Z drhanson $ */#ifndef EXCEPT_INCLUDED#define EXCEPT_INCLUDED#include <setjmp.h>#define T Except_Ttypedef struct T { const char *reason;} T;typedef struct Except_Frame Except_Frame;struct Except_Frame { Except_Frame *prev; jmp_buf env; const char *file; int line; const T *exception;};enum { Except_entered=0, Except_raised, Except_handled, Except_finalized };extern Except_Frame *Except_stack;extern const Except_T Assert_Failed;void Except_raise(const T *e, const char *file,int line);#ifdef WIN32#include <windows.h>extern int Except_index;extern void Except_init(void);extern void Except_push(Except_Frame *fp);extern void Except_pop(void);#endif#ifdef WIN32/* $Id: except.h 6 2007-01-22 00:45:22Z drhanson $ */#define RAISE(e) Except_raise(&(e), __FILE__, __LINE__)#define RERAISE Except_raise(Except_frame.exception, \ Except_frame.file, Except_frame.line)#define RETURN switch (Except_pop(),0) default: return#define TRY do { \ volatile int Except_flag; \ Except_Frame Except_frame; \ if (Except_index == -1) \ Except_init(); \ Except_push(&Except_frame); \ Except_flag = setjmp(Except_frame.env); \ if (Except_flag == Except_entered) {#define EXCEPT(e) \ if (Except_flag == Except_entered) Except_pop(); \ } else if (Except_frame.exception == &(e)) { \ Except_flag = Except_handled;#define ELSE \ if (Except_flag == Except_entered) Except_pop(); \ } else { \ Except_flag = Except_handled;#define FINALLY \ if (Except_flag == Except_entered) Except_pop(); \ } { \ if (Except_flag == Except_entered) \ Except_flag = Except_finalized;#define END_TRY \ if (Except_flag == Except_entered) Except_pop(); \ } if (Except_flag == Except_raised) RERAISE; \} while (0)#else#define RAISE(e) Except_raise(&(e), __FILE__, __LINE__)#define RERAISE Except_raise(Except_frame.exception, \ Except_frame.file, Except_frame.line)#define RETURN switch (Except_stack = Except_stack->prev,0) default: return#define TRY do { \ volatile int Except_flag; \ Except_Frame Except_frame; \ Except_frame.prev = Except_stack; \ Except_stack = &Except_frame; \ Except_flag = setjmp(Except_frame.env); \ if (Except_flag == Except_entered) {#define EXCEPT(e) \ if (Except_flag == Except_entered) Except_stack = Except_stack->prev; \ } else if (Except_frame.exception == &(e)) { \ Except_flag = Except_handled;#define ELSE \ if (Except_flag == Except_entered) Except_stack = Except_stack->prev; \ } else { \ Except_flag = Except_handled;#define FINALLY \ if (Except_flag == Except_entered) Except_stack = Except_stack->prev; \ } { \ if (Except_flag == Except_entered) \ Except_flag = Except_finalized;#define END_TRY \ if (Except_flag == Except_entered) Except_stack = Except_stack->prev; \ } if (Except_flag == Except_raised) RERAISE; \} while (0)#endif#undef T#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -