c++中,拋出異常採用的是try catch throw,而C語言使用的則是setjmp與longjmp 。
C語言中setjmp是用來保存程序運行時堆棧環境,而longjmp是用來恢復先前程序中的setjmp所保存的堆棧環境。
setjmp聲明如下:int setjmp(jmp_buf envbuf);
longjmp聲明:void longjmp(jmp_buf envbuf,int val);
其中,setjmp中envbuf 緩衝區是用來保存系統堆棧環境的。而longjmp的第一個參數就是由setjmp保存的堆棧環境,第二個參數
是setjmp的返回值。如果,setjmp直接調用返回,則返回0,若,經過longjmp返回,則返回非0值。
c++中的try catch與這個有些相像。有一個區別:
setjmp與longjmp調用棧的時候,無法調用局部對象的析構函數。