//author:DriverMonkey//date:1/24/2013//copyright: no copyright//mail:bookworepeng@hotmail.com//enviromen:Ubuntu#include <iostream>#include <setjmp.h>using namespace std;static jmp_buf jmpbuffer;static void catch_exception(void);static void raise_exception_1(void);static void raise_exception_2(void);int main(int argc, char *argv[]){cout<<"main()++"<<endl;catch_exception();raise_exception_1();raise_exception_2();cout<<"main()--"<<endl;return 0;}static void catch_exception(void){cout<<"catch_exception()++"<<endl;setjmp(jmpbuffer);cout<<"catch_exception()--"<<endl;}static void raise_exception_1(void){cout<<"raise_exception_1()++"<<endl;longjmp(jmpbuffer, 1);cout<<"raise_exception_1()--"<<endl;}static void raise_exception_2(void){cout<<"raise_exception_2()++"<<endl;longjmp(jmpbuffer, 2);cout<<"raise_exception_2()--"<<endl;}
Terminal Output:
main()++
catch_exception()++
catch_exception()--
raise_exception_1()++
catch_exception()--
raise_exception_2()++
catch_exception()--
main()--