C C 異常處理階段總結

2021-07-09 01:36:07 字數 797 閱讀 1907

所謂異常,即指令執行時,原計畫的執行順序必須改變。導致這種改變的原因包括:1,使用者主動丟擲異常 2. 指令執行時異常。

要進行異常處理,第一步就是捕獲異常。誰來捕獲,可能是:1.程式本身 2. 作業系統。如果程式不捕獲,作業系統也不捕獲,系統肯定就崩潰了。程式本身只能捕獲使用者主動丟擲的異常。這種使用者主動丟擲的異常,實際上是程式設計師實現知道的,所以實現準備了捕獲**。前面文章中的setjumper/longjump其實就是這種機制。

作業系統如果提供異常捕獲機制,但作業系統如何處理異常呢?當然作業系統會提供些確認處理函式,否則的話作業系統只有崩潰了。目前可以猜想作業系統的處理方式可能包括把程式給殺死,然後產生resetlog,或者告訴user,比如在windows作業系統上。 使用者程式也可以註冊異常處理函式,然後異常的處理就先交給程式本身了。實際上,c++的異常處理機制就是利用了異常函式處理註冊機制。

為了讓程式設計師更加輕鬆應對異常處理,直接自己卻註冊異常處理函式,就太直接面對作業系統了,必須對作業系統掌握很充分。vc++在最原始的異常處理函式內部做了二次抽象。同時,再提供編譯器和程式語法的支援,程式設計師就不要care其背後的機制了。

總的來說,要實現乙個異常處理的完美方案,以下幾個部分,必須合理工作才行:

1. 程式語言,主要是為了方便程式設計師,簡單幾個指令搞定,不用care實現細節

2.作業系統,異常本身就是作業系統分內應該處理的事情

3.硬體,主要是cpu對棧的原生支援。

4,棧,由於異常發生時,需要知道誰來處理,怎麼處理,以及歷史的清理,stack trace的列印。而這些資訊都包含在棧中。而且棧本來就天生給執行緒使用的,對於處理多工也非常方便。

C C 異常總結

使用c 異常出來錯誤的原因 c語言處理錯誤的方式有終止程序 assert 返回錯誤碼,c標準庫中setjmp和longjmp組合,但都有各自的缺陷 assert發生記憶體錯誤,除0錯誤時就會終止程式,錯誤碼需要程式設計師查詢對應的錯誤,總之,c語言中基本都是返回錯誤碼的方式,部分採用錯誤碼的方式。c...

C C 異常處理 二

c 中內建了異常處理的語法元素 try.catch.try語句處理正常 邏輯 catch語句處理異常情況 try語句中的異常由對應的 catch語句處理 try catch c 通過throw語句丟擲異常,throw關鍵字後邊跟的是一種 異常標誌 可以是任何資料型別 包括自定義類 來代表異常。程式設...

C C 異常處理區別

c異常 c structured exception 只能處理一種型別 unsigned int c 異常 c exception 處理很多態別。c異常根據無符號整型的值來標識,而c 異常是根據資料型別來標識的。當在c程式中引發了異常後,每乙個能處理者都去檢查異常內容來決定是自己處理還是交給其他處理...