c++拋出異常方式與C語言的區別

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調用棧的時候,無法調用局部對象的析構函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章