C 異常處理(一)

2021-04-12 22:01:12 字數 1671 閱讀 2729

//

normal program statements

...try

catch

( cexception

* e )

//other normal program statements

瞧瞧,**看上去顯得那麼整齊、乾淨,try block和catch block遙相呼應,多有對稱美呀!因此主人公初次見面後就一見鐘情了。

為什麼要選用異常處理的程式設計方法?

當然更為重要的是,c++中引入的異常處理的程式設計機制提供給程式設計師一種全新的、更好的程式設計方法和思想。在c++中明確提出trycatch異常處理程式設計方法的框架之前的年代,程式設計師是怎樣編寫程式的,如下:

void

main(

intargc, 

char

* argv)

//do other job }

}else }

else

因為程式的執行過程中總會遇到許多可預知或不可預知的錯誤事件,例如說,由於記憶體資源有限導致需要分配的記憶體失敗了;或某個目錄下本應存在的乙個檔案找不著了;或說不小心被零除了、記憶體越界了、陣列越界了等等。這些錯誤事件存在非常大的隱患,因此程式設計師總需要在程式中不斷加入if語句,來判斷是否有異常出現,如果有,就必須要及時處理,否則可能帶來意想不到的,甚至是災難性的後果。這樣一來,程式可讀性差了很多,總是有許多與真正工作無關的**,而且也給程式設計師增加了極大的工作負擔,多數類似的處理錯誤的**模組就像滿山的牛屎一樣遍地都是(程式設計師不大多是「牛」人嗎?所以。。。哈哈)。

但c++中的異常處理的機制徹底改變了這種面貌,它使真正的計算處理和錯誤處理分開來,讓程式設計師不再被這些瑣碎的事情所煩擾,能關注於真正的計算處理工作。同時**的可讀性也好了。因此我們有理由選擇異常處理的程式設計方法。具體原因如下:

1、 把錯誤處理和真正的工作分開來;

2、 **更易組織,更清晰,複雜的工作任務更容易實現;

3、 毫無疑問,更安全了,不至於由於一些小的疏忽而使程式意外崩潰了;

4、 由於c++中的try catch可以分層巢狀,所以它提供了一種方法使得程式的控制流可以安全的跳轉到上層(或者上上層)的錯誤處理模組中去。(不同於return語句,異常處理的控制流是可以安全地跨越乙個或多個函式 )。

5、 還有乙個重要的原因就是,由於目前需要開發的軟體產品總是變得越來越複雜、越來越龐大,如果系統中沒有乙個可靠的異常處理模型,那必定是一件十分糟糕的局面。

相信絕大多數程式設計師都知道c++中的異常處理的程式設計方法,可還是有很多人已習慣原來單純的面向過程的**組織方式,不太習慣或較少使用trycatch異常處理。為了使您編寫的**更安全;為了使您編寫的**讓他人更易閱讀,主人公阿愚強烈建議在您書寫的**中盡可能多用異常處理機制,少一些不必要的if判斷語句。

異常的組織

1.將異常組織成層次樹狀結構,使用繼承來實現層次樹狀結構。這樣做的好處是(1) 可以幫助異常的處理,(2)對異常可以進行擴充套件。

2.在c++中,當異常被丟擲時被複製,所以處理器catch中得到的只是原始異常的乙個副本,所以要求定義的異常類是可複製的。

異常的處理

1.在catch中進行異常的處理時,最好使用指標或者引用來避免c++中,上溯造型時帶來的資訊丟失問題。

2.重新丟擲異常,形式是throw;

3.捕捉所有的異常使用,形式是catch(...)

4.捕捉異常的順序是從具體到抽象

C 處理異常 基礎一

c 處理異常的機制引入 在乙個小的程式中,可以用比較簡單的方法處理異常,例如用if語句判別除數是否為0,如果是。則輸出乙個出錯資訊。但是在乙個大的系統中,包含許多模組,每個模組義包含許多函式,函式之間又五相呼叫,比較複雜。如果在每乙個函式中都設定處理異常的程式段,會使程式過於複雜和龐大。因此,c 採...

C 異常處理

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

c 異常處理

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