C标准函数setjmp和longjmp
setjmp函数
#include <setjmp.h>
int setjmp(jmp_buf env)
setjmp函数可以把jmp_buf结构的变量env保存起来,并返回一个int为0的值。
longjmp函数
void longjmp(jmp_buf env, int val);
longjmp函数把setjmp函数上一次保存的变量env还原,并返回一个int为val的值。
异常处理
jmp_buf env; double divide(double div, double by) { if(by == 0) longjmp(env, 1); return div / by; } void f() { if(setjmp(env) == 0) divide(2, 0); else printf("cannot divide 0"); }
或者
jmp_buf env; void raise_exception() { longjmp(env, 3); /* jump to case 3 */ } void f() { switch (setjmp(env)) { case 0: printf("setjmp is initializing\n"); raise_exception(); case 1: printf("Case 1\n");break; case 2: printf("Case 2\n");break; case 3: printf("Case 3\n");break; default: break; } }