C 中的異常丟擲和捕獲

2021-10-05 20:49:06 字數 1615 閱讀 4177

在 c 語言中,如果發生錯誤,上級函式要進行出錯處理,層層上傳,容易造成過多的出錯處理**,並且傳遞的效率比較低下。

try

catch(exceptiontype var)

#include using namespace std;

void func1()

catch(double)

{cout<<"catch func1()"《結果為:

catch func1()

end func1()

end func2()

end func3()

end main

上邊的異常傳遞路線為 func3->func2()->func1(),在 func1 中找到對應的 catch 塊,然後執行對應 catch 塊中的語句,輸出:

catch func1()
整個的異常處理已經結束,跳出 func1() 的 try-catch 塊,繼續執行 func1() 的函式體,陸續輸出:

end func1()

end func2()

end func3()

end main

此時程序結束。

如果將 func1() 中的 catch 到的異常型別換個型別,如:

catch(void *)
結果為:

catch main

end main

則會在 func1(),func2(),func3() 中都找不到對應的 catch 匹配,直到 main 函式才能找到對應的匹配,然後輸出:

catch main

end main

如果將 main 函式中的 catch 捕獲型別也修改為:

catch(void *)
結果為:

terminate called after throwing an instance of 'double'
此時系統就會呼叫系統函式,使程式終止。

void func() throw (a,b,c);     // 表明該函式只會丟擲 a,b,c 及其子型別的異常
void func() throw();
#include using namespace std;

class a

{public:

a(){ cout<<"a()"《結果為:

a()a()~a()

~a()

no x, no y

如果 throw 的是乙個類物件:

#include using namespace std;

class a

{public:

a(){ cout<<"a()"《結果為:

a()a(const a &obj)

~a()

no x, no y

~a()

捕獲和丟擲異常

異常處理5個關鍵字 try catch finally throw throws 不捕獲異常 public class test 捕獲異常,finally 可以不要,用於 假設io資源關閉,就會用到。public class test catch arithmeticexception e fina...

丟擲異常和捕獲異常 多捕獲和最終重新丟擲的異常處理

丟擲異常和捕獲異常 joseph d.darcy宣布,在langtools團隊成員maurizio cimadamore開發的多捕獲實現成功的經驗之後,具有多捕獲和最終重新丟擲的改進的異常處理將成為即將到來的jdk 7構建的一部分。當前,使用者可以將變更集應用於jdk 7 langtools儲存庫的...

oracle plsql 捕獲異常和丟擲異常

在寫oracle儲存過程的時候很多東西放到儲存過程裡面比如一些判斷等,要比在程式邏輯裡面簡單很多,但是也會涉及到捕獲和丟擲一樣的問題。exception when excepttion name1 then when excepttion name2 then when excepttion nam...