程式中的錯誤分為編譯時的錯誤和執行時的錯誤。編譯時的錯誤主要是語法錯誤,這類錯誤比較容易修改,因為編譯系統會指出執行錯誤在第幾行,什麼錯誤。而執行時的錯誤則不容易修改,因為其中的錯誤是不可預料的,或者可以預料但無法避免,比如記憶體空間不夠,或者在呼叫函式時,出現陣列越界等錯誤。我們把程式執行時的錯誤統稱為異常,對異常的處理稱為異常處理。
c++中所提供的異常處理機制結構清晰,在一定程度上可以保證程式的健壯性。
c++的異常處理機制有3部分組成:try(檢查),throw(丟擲),catch(捕獲)。把需要檢查的語句放在try模組中,檢查語句發生錯誤,丟擲異常,發出錯誤資訊,由catch來捕獲異常資訊,並加以處理。一般throw丟擲的異常要和catch所捕獲的異常型別所匹配。
異常處理的一般格式為:
trycatch(異常型別1)
catch(異常型別2)
...下面例子演示了異常處理:
#include "stdafx.h"
#include template t div(t x,t y)
int main()
模組根本沒有被執行。如果,我們把y的值改為1,則結果就變成為:
如果在執行try語句模組時,沒有發生異常,則catch語句塊不起作用,流程轉到其後的語句繼續執行。從上述兩個結果中可知第一次throw丟擲的int型別所以找到處理該型別的catch,而第二次是丟擲double型別所找到的是處理double型別的catch。
補充幾點:(1)try和catch塊中必須要用花括號括起來,即使花括號內只有乙個語句也不能省略花括號;(2)try和catch必須成對出現,乙個try_catch結果中只能有乙個try塊,但可以有多個catch塊,以便與不同的異常資訊匹配;(3)如果在catch塊中沒有指定異常資訊的型別,而用刪節號"...",則表示它可以捕獲任何型別的異常資訊;(4)如果throw不包括任何表示式,表示它把當前正在處理的異常資訊再次丟擲,傳給其上一層的catch來處理;(5)c++中一旦丟擲乙個異常,如果程式沒有任何的捕獲,那麼系統將會自動呼叫乙個系統函式terminate,由它呼叫abort終止程式。
更詳細:
C 異常處理
結構化異常 structured exception vs c 異常 c exception 大家都知道c 異常是c 語言的乙個特性,使用者可以使用throw的方式來丟擲異常,try catch 來捕獲異常。結構化異常是諸如,zero divided,access violations等異常,這些異...
c 異常處理
一 概述 c 自身有著非常強的糾錯能力,發展到如今,已經建立了比較完善的異常處理機制。c 的異常情況無非兩種,一種是語法錯誤,即程式中出現了錯誤的語句,函式,結構和類,致使編譯程式無法進行。另一種是執行時發生的錯誤,一般與演算法有關。關於語法錯誤,不必多說,寫 時心細一點就可以解決。c 編譯器的報錯...
C 異常處理
程式設計師常常忽視異常處理的重要性,這給他們自己的 造成相當大損害。本文將討論如何在c 中使用異常處理,並介紹在應用 中新增 片段以防止某些錯誤的一些簡單方法,這些錯誤可能導致程式異常終止。結構化異常處理 net框架提供一種標準的錯誤報告機制稱為結構化異常處理。這種機制依賴於應用中報告錯誤的異常。在...