異常機制提供程式中錯誤檢測與錯誤處理部分之間的通訊。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框架提供一種標準的錯誤報告機制稱為結構化異常處理。這種機制依賴於應用中報告錯誤的異常。在...