一種簡單的不依賴於程式語言的異常處理方法

2021-04-13 12:47:02 字數 757 閱讀 7951

現在有很多支援異常處理的程式語言。我現在想說的是在 c 語言等不支援異常處理的語言中怎樣實現多路的異常處理功能。

首先,所有可能丟擲異常的函式,都返回乙個布林型值。當返回值為真時,表示沒有異常。否則表示有異常。此外用乙個全域性(或執行緒全域性)變數記錄異常資訊。

第二,在函式內,返回值一開始置為真。異常一旦丟擲(可以是從庫函式如 fputs 等引發,也可以是從其他丟擲異常的函式返回),就將返回值置為假,再跳轉到**資源處理位置(類似於 finally),最後返回。在異常發生時,加入異常資訊及當前函式資訊(最好是在 finally 處理的一開始判斷是否有異常,如果有就加入本函式的資訊)。

第三,對於特定意義要分離的異常型別(比如想把網路異常與記憶體異常分離,記憶體異常通過普通異常渠道通知,而網路異常要有一些不同),可以通過引數傳入乙個布林型變數的位址,通過修改該布林型變數的值來表示是否有特定型別的異常(如網路異常)。這樣,當外面的函式捕獲異常後,可以判斷是否網路異常還是其他異常。

第四,如果異常捕獲後要從中恢復,一般有兩種方法:備份-恢復及日誌-回滾。備份-恢復是指在最外層需要恢復異常的函式在呼叫可能發生異常的函式前備份所有將被影響到的資料,然後一旦發生異常就恢復所有資料。日誌-回滾是指最外層函式建立乙個日誌,然後傳給被呼叫的函式。每個修改資料的函式都往指定日誌記錄恢復資訊。一旦發生異常就回滾整個日誌中所記錄的修改。顯然備份-恢復方法比較簡單,出錯的可能性也較小,在能使用它的時候盡量使用它。

恢復的用處主要是重試。需要注意的是如果重試多次不成功,可能需要再向外繼續丟擲異常,而不是忽略掉,否則可能影響程式後續的處理過程。

構建不依賴於cookie的手機端使用者登入機制(三)

引 三 如何確保各種標籤傳遞sessionid 在前面的例子中,我們已經能讓a標籤的href屬性正確地附加上sessionid了。不過,在實際的開發中,可能會有更加複雜的情況。比如,你可能會用到form,也有可能用到iframe,甚至即使在使用的時候也需要傳遞sessionid。那麼來看下面的 in...

構建不依賴於cookie的手機端使用者登入機制

手機端登入 的問題是乙個困擾我很久的問題。總是會有那麼一些使用者告訴我,他的手機不能登入 了。要想能有效地解決手機登入的問題,一種方案就 是盡可 能多地模擬出使用者的手機端環境出來,針對這些具體的環境對 進行測試和調整。另一種方案就是盡可能地讓 擺脫對於客戶端cookie環境的依賴,建立 更加健壯的...

不依賴於整合開發平台搭建簡易的C編譯環境

整合的ide公司沒買,有時需要自己寫個小的c demo測試程式,手動編譯 鏈結 執行,就很麻煩。setp1 新建指令碼檔案a.bat用於開啟vs自帶的手動編譯視窗 comspec k c program files x86 microsoft visual studio 14.0 vc vcvars...