C 異常處理try throw catch

2021-06-28 00:59:17 字數 1959 閱讀 6871

// tt.cpp : 定義控制台應用程式的入口點。

///*

程式中的錯誤分為編譯時的錯誤和執行時的錯誤。編譯時的錯誤主要是語法錯誤,比如:句尾沒有加分號,括號不匹配,關鍵字錯誤等,這類錯誤比較容易修改,因為編譯系統會指出錯誤在第幾行,什麼錯誤。而執行時的錯誤則不容易修改,因為其中的錯誤是不可預料的,或者可以預料但無法避免的,比如記憶體空間不夠,或者在呼叫函式時,出現陣列越界等錯誤。如果對於這些錯誤沒有採取有效的防範措施,那麼往往會得不到正確的執行結果,程式不正常終止或嚴重的會出現宕機現象。我們把程式執行時的錯誤統稱為異常,對異常處理稱為異常處理。c++中所提供的異常處理機制結構清晰,在一定程度上可以保證程式的健壯性。

c++中處理異常的過程是這樣的:在執行程式發生異常,可以不在本函式中處理,而是丟擲乙個錯誤資訊,把它傳遞給上一級的函式來解決,上一級解決不了,再傳給其上一級,由其上一級處理。如此逐級上傳,直到最高一級還無法處理的話,執行系統會自動呼叫系統函式terminate,由它呼叫abort終止程式。這樣的異常處理方法使得異常引發和處理機制分離,而不在同乙個函式中處理。這使得底層函式只需要解決實際的任務,而不必過多考慮對異常的處理,而把異常處理的任務交給上一層函式去處理。

c++的異常處理機制有3部分組成:try(檢查),throw(丟擲),catch(捕獲)。把需要檢查的語句放在try模組中,檢查語句發生錯誤,throw丟擲異常,發出錯誤資訊,由catch來捕獲異常資訊,並加以處理。一般throw丟擲的異常要和catch所捕獲的異常型別所匹配。mfc定義了try、catch(及and_catch、end_catch)和throw(及throw_last)等用於異常處理的巨集,其本質上也是標準c++的try、catch和throw的進一步強化。mfc建議不再使用try、catch和throw巨集,而是直接使用標準c++的方式。

異常處理的一般格式為:

trycatch(異常型別1)

catch(異常型別2)

mfc較好地將異常封裝到cexception類及其派生類中,自成體系,下表給出了mfc 提供的預定義異常:

異常類含義

cmemoryexception

記憶體不足

cfileexception

檔案異常

carchiveexception

存檔/序列化異常

cnotsupportedexception

響應對不支援服務的請求

cresourceexception

windows 資源分配異常

cdaoexception

資料庫異常(dao 類)

cdbexception

資料庫異常(odbc 類)

coleexception

ole 異常

coledispatchexception

排程(自動化)異常

cuserexception

用訊息框警告使用者然後引發一般 cexception 的異常

下面對異常處理補充幾點:

(1)try和catch塊中必須要用花括號括起來,即使花括號內只有乙個語句也不能省略花括號;

(2)try和catch必須成對出現,乙個try_catch結果中只能有乙個try塊,但可以有多個catch塊,以便與不同的異常資訊匹配;

(3)如果在catch塊中沒有指定異常資訊的型別,而用刪節號"...",則表示它可以捕獲任何型別的異常資訊;

(4)如果throw不包括任何表示式,表示它把當前正在處理的異常資訊再次丟擲,傳給其上一層的catch來處理;

(5)c++中一旦丟擲乙個異常,如果程式沒有任何的捕獲,那麼系統將會自動呼叫乙個系統函式terminate,由它呼叫abort終止程式;

*/#include "stdafx.h"

#include

int _tmain(int argc, _tchar* argv)

catch(int i)

catch(char * perro)

catch(...)

return 0;

}

C 異常處理

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

c 異常處理

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

C 異常處理

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