C 異常 處理機制

2021-07-16 09:38:30 字數 1885 閱讀 7361

在c++的發展過程中,為了實際的需要,引入了異常處理機制。程式中常見的錯誤:語法錯誤執行錯誤,語法錯誤一般都是在編譯時候發現的,編譯器基本上都會報出錯誤的具體位置,因此這類錯誤一般都是比較好修改,執行錯誤一般不容易進行除錯,比如說,程式崩潰(一般是由於棧溢位),執行結果錯誤(一般是演算法的邏輯結構有問題)、程式非正常終止等現象。c++中引入異常處理(對執行時出現的差錯進行處理),能夠極大地提高程式的容錯能力。

c++處理異常是利用try(檢查)、throw(丟擲)、catch(捕捉)三部分來進行處理的,把有可能出現異常的**放到try塊中,throw用來丟擲乙個異常資訊,catch的引數一般為丟擲的資訊型別,如果丟擲的型別和catch捕捉的型別相同時候,則就進行對應的異常處理。

下面是乙個異常處理的例子:

#include using namespace std;

#include /*定義計算三角形面積的函式(利用海**式s = sqrt(q*(q - a)*(q - b)*(q - c)),其中q = (a+b+c)/2)滿足三角形的條件:a+b>c  a+c>b  b+c>a(a,b,c都大於0)

*/double ********(double a, double b, double c)    

return sqrt(q * (q - a) * (q - b) * (q - c));   //求三角形面積

}int main()

}catch (double)   //捕捉異常並處理

system("pause");

return 0;

}

在上面的例子中,三角形的三邊長度有可能不滿足構成三角形的條件,會發生異常,try塊中為可能發生異常的**,在********函式中,對三邊的長度進行條件的判斷,如果不滿足,則將異常進行丟擲,這時程式會返回主調函式中尋找對應的catch塊,上面的throw a;a的資料型別為double型別,main函式中catch進行捕捉的型別也為double型別,兩者相匹配,就執行catch塊中的處理**,然後程式不會返回被呼叫函式丟擲的位置,而是直接執行catch後面的**。

注意:

(1)try塊中的**不會影響原來執行的順序,如果try中沒有發生異常就會不執行catch塊中的**,而直接執行catch之後的**。若出現異常,對異常進行丟擲,流程會立即離開本函式,返回上一級的函式,則不會執行本函式throw後面的**。

(2)流程返回到上一級函式時,系統會尋找與之匹配的catch塊,進而執行。執行完catch塊中的**,緊接著執行catch塊後面的**,直到程式結束。

(3)被檢測的部分必須放在try塊中,否則會不起作用。catch塊不能夠單獨使用,但是try塊可以單獨使用,但是只進行檢查,而不進行錯誤處理。try和catch塊中必須使用花括號括起來,哪怕塊中只有乙個語句。乙個程式中只能有乙個try塊,但可以有多個catch塊,可以進行多個問題的處理。catch只會檢查引數的型別,不檢查引數的值。

(4)若catch(doube b){};   則是將引數的double型別和throw a;的型別進行比較,然後將a的值賦值給b,即就是b=a;

若catch(...){};   則是不論什麼型別,都會執行catch塊中的**。一般這樣的catch會放在程式的最後,對於一些意想不到的異常進行處理,如果放在最開始則後面的catch就不會被執行。

(5)try-catch可以和throw在同乙個函式中,也可以不在同乙個函式中,若不在乙個函式中,它們的catch執行滿足下圖的關係:

(6)如果throw的異常資訊沒有找到與之相匹配的catch,系統會自動呼叫乙個系統函式terminate函式,使得程式停止執行。

c 異常處理機制

c 異常處理機制 c 異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性 安全性和穩固性,克服了傳統方法所帶來的問題.異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch 丟擲異常即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到...

c 異常處理機制

c 異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性 安全性和穩固性,克服了傳統方法所帶來的問題.異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch 丟擲異常即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異...

C 異常處理機制

c 異常處理機制主要使用try,throw,catch三大關鍵字。try catch語句形式如下 require redcarpet markdown redcarpet.new hello world puts markdown.to htmltry catch exception1 ex 捕獲型...