C 異常處理

2022-03-19 06:07:30 字數 1778 閱讀 8080

前言

大型和十分複雜的程式往往會產生一些很難查詢的甚至是無法避免的執行時錯誤。當發生執行時錯誤時,不能簡單地結束程式執行,而是退回到任務的起點,指出錯誤,並由使用者決定下一步工作。物件導向的異常處理(exception handling)機制是c++語言用以解決這個問題的有力工具。函式執行時,放在try(測試)程式塊中的任何型別的資料物件發生異常,都可被throw塊丟擲,隨即沿呼叫鏈退回,直到被catch塊捕獲,並在此執行異常處理,報告出現的異常等情況。從丟擲到捕獲,應將各巢狀呼叫函式殘存在棧中的自動物件、自動變數和現場保護內容等進行清除。如果已退到入口函式還未捕獲則由abort()來終結入口函式。

這裡所講的異常(exception)是程式可能檢測到的,執行時不正常的情況,如儲存空間耗盡、陣列越界、被0除等等,可以預見可能發生在什麼地方,但是無法確知怎樣發生和何時發生。特別在乙個大型的程式(軟體)中,程式各部分是由不同的小組編寫的,它們由公共介面連起來,錯誤可能就發生在相互的配合上,也可能發生在事先根本想不到的個別的條件組合上。

c++提供了一些內建的語言特性來產生(raise)或丟擲(throw)異常,用以通知「異常已經發生」,然後由預先安排的程式段來捕獲(catch)異常,並對它進行處理。這種機制可以在c++程式的兩個無關(往往是獨立開發)的部分進行「異常」通訊。由程式某一部分引發了另一部分的異常,這一異常可回到引起異常的部分去處理(沿著程式函式的呼叫鏈)。這也是分清處理責任的好辦法。

異常規範

c++函式有2個返回值,左側是正常返回,右側是異常返回

float div(int a,int b)預設是丟擲所有異常

float div(int a,int b)throw(int,short,test)規定只能丟擲int、short、test型別的異常。如果是float型別異常,則無法丟擲

異常處理的機制

首先,在c++中異常往往用類(class)來實現,以棧為例,異常類宣告如下:

class poponempty; //棧空異常

class pushonfull; //棧滿異常

#include#include

using

namespace

std;

template

class

pushonstackfull

~pushonstackfull()

{}public

:

void _what() const

private

: type value;

string

str;

};template

class

stack

~stack()

public

:

bool isfull()const

bool push(const type &x)

data[top++] =x;

return

true

; }

void show_stack()const

}private

:

enum ;

type *data;

size_t capacity;

size_t top;

};int

main()

}catch (pushonstackfull &e)

st.show_stack();

return0;

}

view code

C 異常處理

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

c 異常處理

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

C 異常處理

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