C 異常處理

2021-07-05 22:40:37 字數 1634 閱讀 8693

異常機制提供程式中錯誤檢測與錯誤處理部分之間的通訊。c++ 的異常處理中包括:

throw 表示式, 錯誤檢測部分使用這種表示式來說明遇到了不可處理的錯誤。可以說,throw 引發了異常條件。

try 塊,錯誤處理部分使用它來處理異常。try 語句塊以 try 關鍵字開始,並以乙個或多個 catch 子句結束。在 try 塊中執行的**所丟擲(throw)的異常, 通常會被其中乙個 catch 子句處理。由於它們「處理」異常,catch 子句也稱為處理**。

由標準庫定義的一組 異常類,用來在 throw 和相應的 catch 之間傳遞有關的錯誤資訊。

try

catch(valuetype v)

其中,throw丟擲異常值,catch接受,當然,throw必須在「try語句塊」中才有效。

標準庫異常類定義在以下4個頭檔案中:

1. exception 標頭檔案定義了最常見的異常類,它的類名是 exception。這個類只通知異常的產生,但不會提供更多的資訊。

2. stdexcept 標頭檔案定義了幾種常見的異常類, 這些型別在下表中列出。

exception

最常見的問題。

runtime_error

執行時錯誤:僅在執行時才能檢測到問題

range_error

執行時錯誤:生成的結果超出了有意義的值域範圍

overflow_error

執行時錯誤:計算上溢

underflow_error

執行時錯誤:計算下溢

logic_error

邏輯錯誤:可在執行前檢測到問題

domain_error

邏輯錯誤:引數的結果值不存在

invalid_argument

邏輯錯誤:不合適的引數

length_error

邏輯錯誤:試圖生成乙個超出該型別最大長度的物件

out_of_range

邏輯錯誤:使用乙個超出有效範圍的值

3. new 標頭檔案定義了 bad_alloc 異常型別,提供因無法分配記憶體而由 new丟擲的異常。

4. type_info 標頭檔案定義了 bad_cast 異常型別。

如果希望程式所包含的除錯**僅在開發過程中執行。當應用程式已經完成,並且準備提交時,就會將除錯**關閉。可使用 ndebug 預處理變數實現有條件的除錯**:

int main()

{#ifndef ndebug

cerr << "starting main"

<< endl;

#endif

// ...

如果 ndebug 未定義,那麼程式就會將資訊寫到 cerr 中。如果 ndebug 已經定義了,那麼程式執行時將會跳過 #ifndef 和 #endif 之間的**。

預處理器還定義了其餘四種在除錯時非常有用的常量:

file檔名

line當前行號

time檔案被編譯的時間

date檔案被編譯的日期

可使用這些常量在錯誤訊息中提供更多的資訊。

C 異常處理

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

c 異常處理

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

C 異常處理

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