static jmp_buf env; double divide(double to, double by) { if(by == 0) longjmp(env, 1); return to / by; } void f() { if (setjmp(env) == 0) divide(2, 0); else printf("Cannot / 0"); printf("done"); }
如果复杂一点,可以根据 longjmp 传递的返回值来判断各种不同的异常,来进行区别的处理,代码结构如下:
switch(setjmp(env)): case 0: //default //... case 1: //exception 1 //... case 2: //exception 2 //... //...
关于使用 C 语言来处理异常,可以参见这篇文章,介绍了更多复杂的结构,但无外乎就是 setjmp 和 longjmp 的应用。
参考资料C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码
将C语言梳理一下,分布在以下10个章节中:
Linux-C成长之路(一):Linux下C编程概要
Linux-C成长之路(十):其他高级议题