C C 異常處理區別

2022-09-22 21:09:18 字數 1546 閱讀 2949

c異常(c structured exception)只能處理一種型別(unsigned int),c++異常(c++ exception)處理很多態別。c異常根據無符號整型的值來標識,而c++異常是根據資料型別來標識的。當在c程式中引發了異常後,每乙個能處理者都去檢查異常內容來決定是自己處理還是交給其他處理者,或者是忽略。在c++程式中異常被丟擲後,它有可能是任何一種型別。

c異常處理模式是「非同步」,當異常發生後會向下繼續執行的。c++異常處理模式是「同步」,異常發生時就是異常丟擲時!

在c++程式中引發c異常後,能被c的結構化異常者處理或者被c++ catch中的處理者處理。

下面這例子:在c++程式引發了c的異常。

[cpp] view plaincopyprint?

// exceptions_exception_handling_differences.cpp 

// compile with: /eha 

#include  

using namespace std; 

void sehfunc( void ); 

int main()  

catch( ... )  }  

void sehfunc()  

__finally  

} 程式結果:

in finally.

caught a c exception.

下面這個例子是如何將c異常包裝成c++異常

[cpp] view plaincopyprint?

// exceptions_exception_handling_differences3.cpp 

// compile with: /eha 

#include  

#include  

#include  

class se_exception  

unsigned int nse; 

public: 

se_exception( se_exception& e) : nse(e.nse) {} 

se_exception(unsigned int n) : nse(n) {} 

~se_exception() {} 

unsigned int getsenumber()  

};  

void sefunc()  

__finally  }  

void trans_func( unsigned int u, _exception_pointers* pexp )  

int main()  

catch( se_exception e )  

} 程式結果:

in trans_func.

in finally

caught a __try exception with se_exception.

nse = 0xc0000094

綜上,c異常僅能被try{}catch(...){}來捕獲處理,但是並沒有關於異常型別和內容的說明,為了異常更清楚,可以將c異常包裝成c++異常(上述例子)。

msdn相關解釋

C C 異常處理 二

c 中內建了異常處理的語法元素 try.catch.try語句處理正常 邏輯 catch語句處理異常情況 try語句中的異常由對應的 catch語句處理 try catch c 通過throw語句丟擲異常,throw關鍵字後邊跟的是一種 異常標誌 可以是任何資料型別 包括自定義類 來代表異常。程式設...

C C 異常處理階段總結

所謂異常,即指令執行時,原計畫的執行順序必須改變。導致這種改變的原因包括 1,使用者主動丟擲異常 2.指令執行時異常。要進行異常處理,第一步就是捕獲異常。誰來捕獲,可能是 1.程式本身 2.作業系統。如果程式不捕獲,作業系統也不捕獲,系統肯定就崩潰了。程式本身只能捕獲使用者主動丟擲的異常。這種使用者...

C C 複習 C 異常處理

c語言異常處理 try程式塊 該區段包含可能會發生異常的 在發生了異常之後,通過throw丟擲異常 throw程式塊 throw語句用於丟擲異常,在c 中,被丟擲的異常可以是內建型別的物件,也可以是自定義型別的物件 catch程式塊 對異常進行捕捉,處理特定型別的異常。例一 include incl...