1. 程式人生 > >C語言實現try catch處理

C語言實現try catch處理

我們都知道,在Java、C#等高階程式語言中,都自帶有異常處理機制,其基本結構如下:
try{
程式語句;
}catch(Exception ex){
異常處理;
}
這樣做不但可以防止程式異常終止,而且在出現錯誤時可以及時作一些釋放資源處理,對程式能繼續健壯的執行下去尤其重要。

但是C語言中沒有這樣異常處理機制,我們可以通過巨集定義去實現類似這樣的操作,這時候就使用到C語言強大而又被我們‘嫌棄’的goto語句了。
這裡我們需要定義幾個巨集:
(1)異常處理框架
d0cfd4a17c8d4e9abdca13bbe6a1ddc5.png
在BEGINPROC和ENDPROC裡處理我們的程式,有異常的情況時跳到CATCHERROR和ENDERROR裡統一處理
(2)幾種異常條件巨集定義:
c9d0c9d6bc6345f9bd6f9f809f0ad879.png

(3)異常統一處理巨集定義:
e713d164399941eab3b65a5943015c82.png

下面我們來分析這三種情況:
(1)不滿足某種條件產生異常跳轉:
b224adb2c3ec44c2b1221e7cb77b4294.png
這裡是判斷陣列是否索引是否越界,如果越界則判斷跳轉失敗,程式如何結構為:
4ec77683bc934cdf84dadb9e8c26b2f1.png
可以看到,這裡列印了出錯的函式名、行號和錯誤碼,我們可以很容易的定位出錯誤
(2)出錯的時候丟擲錯誤,統一處理:
fad35a72971f4da289678bbc9d593e4b.png
這裡我們開啟檔案或分配記憶體失敗都統一到錯誤處理當中,而不是直接return返回。這是一種很好的處理方法,不然很容易導致記憶體洩露或檔案未關閉,
從上面我們可以看出,當使用return語句時,檔案未開啟成功,則返回,而當檔案開啟成功,而記憶體申請失敗的時候,我們很容易直接返回,而導致
檔案未正常關閉。使用了框架後,我們把使用的資源都作一個統一的管理,這樣就不會輕易造成資源洩露的問題了,同時也有問題定位列印資訊
(3)執行函式是否成功而跳轉:
74dadb85ad4b4c6d975ce9e5f6d3cec8.png


當函式執行的返回值不成功時,我們也進行到異常跳轉,進行統一處理
以上就是C語言的一些常見的異常處理,當然還有其他的異常處理條件,但是基於以上框架可以很容易的做到。

原文連結:http://www.uptoday.net/articles/2017/11/18/1510981406330.html