C 異常處理

2022-04-29 09:01:26 字數 1667 閱讀 4809

try

throw

catch

如果某段程式中發現了自己不能處理的異常,可以使用throw表示式來拋擲這個異常。

try子句後的復合語句是**段的保護。如果預料到某段**可能發生異常,就將其放在try子句之後。如果遇到異常,則其中的throw表示式就會丟擲這個異常。

執行過程:

程式正常執行到try語句,然後執行其中的**。

如果在保護段內執行期間沒有引起異常,那麼跟在try之後的catch子句就不執行。程式從異常被拋擲的try塊後跟隨的最後乙個catch子句後面的語句執行下去。

程式執行到乙個throw表示式時,乙個異常物件會被建立。若異常的拋出點本身就在乙個try子句內,則該try語句後的catch子句會按順序檢查異常型別是否與宣告的型別匹配;若異常被拋出點本身不在任何try子句內,或丟擲的異常與各個catch子句宣告的型別皆不匹配,則結束當前函式的執行,回到當前函式的呼叫點,把呼叫點作為異常的拋出點,然後重複這一過程。直到異常被乙個catch語句捕獲。

如果始終未找到與被拋擲異常匹配的catch子句,最終main函式會停止執行。

如果找到了乙個匹配的catch子句,則catch子句後的復合語句會執行。復合語句執行完畢之後,當前try塊即執行完畢。

trhow與catch匹配:

catch子句中宣告的異常型別就是丟擲異常物件的型別或者是引用。

catch子句中宣告的異常型別是丟擲異常物件的的型別的公共基類或其引用。

丟擲異常類似和catch子句中宣告的異常型別皆為指標型別,且前者到後者可以隱式轉換。

catch(. . .)可以匹配所有異常。

#include

using namespace std;

int divide(int x,int y)

int main()

catch (int e)

cout<<"that's ok"<

return 0;

}輸出:

5/2=2

error 8 is divided by zero!

that's ok

強大功能:具有為異常拋擲前構造的所有區域性物件自動呼叫析構函式的能力!

用乙個不帶運算元的throw 表示式可以將當前正在被處理的異常再次丟擲,這樣乙個表示式只能出現在乙個catch子句中或者在catch子句內部呼叫的函式中。

C 異常處理

結構化異常 structured exception vs c 異常 c exception 大家都知道c 異常是c 語言的乙個特性,使用者可以使用throw的方式來丟擲異常,try catch 來捕獲異常。結構化異常是諸如,zero divided,access violations等異常,這些異...

c 異常處理

一 概述 c 自身有著非常強的糾錯能力,發展到如今,已經建立了比較完善的異常處理機制。c 的異常情況無非兩種,一種是語法錯誤,即程式中出現了錯誤的語句,函式,結構和類,致使編譯程式無法進行。另一種是執行時發生的錯誤,一般與演算法有關。關於語法錯誤,不必多說,寫 時心細一點就可以解決。c 編譯器的報錯...

C 異常處理

程式設計師常常忽視異常處理的重要性,這給他們自己的 造成相當大損害。本文將討論如何在c 中使用異常處理,並介紹在應用 中新增 片段以防止某些錯誤的一些簡單方法,這些錯誤可能導致程式異常終止。結構化異常處理 net框架提供一種標準的錯誤報告機制稱為結構化異常處理。這種機制依賴於應用中報告錯誤的異常。在...