📄 except.h
字号:
#ifndef EXCEPT_INCLUDED#define EXCEPT_INCLUDED#include <setjmp.h>#define T Except_Ttypedef struct T { 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;void Except_raise(const T *e, const char *file,int line);#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 { \ 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)#undef T#endif/* $RCSfile: RCS/except.doc,v $ $Revision: 1.6 $ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -