《Windows核心程式設計》 防禦性程式設計 斷言

2021-08-25 10:43:33 字數 912 閱讀 2290

防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是:子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查、預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。

斷言通常是乙個例程(routine)或乙個巨集(macros),斷言通常包含有兩個引數:布林表示式和訊息。布林表示式的反面是乙個錯誤,c標準庫提供了乙個assert巨集,它只帶有乙個引數,如:

assert(1==0);

//注意布林表示式不用加引號

使用assert巨集,需要包含標頭檔案cassert或assert.h,執行上述語句的結果是程式結束執行,並彈出對話方塊顯示出錯資訊。

我們可以自定義assert巨集,有兩個目的:

1)新增引數。例如新增乙個訊息引數,使assert巨集輸出更為豐富的資訊;

2)改變assert的行為內容。c標準庫中的assert巨集將中斷程式,可以讓程式繼續執行而不中斷或者進入除錯狀態等,另外還可以控制訊息輸出的目標,即控制訊息是輸出到控制台還是文字檔案,甚至是通過網路發出。

下面是乙個c++實現的自定義斷言:

#ifdef

_debug

#define

assert(exp, message) / /}

#else

#define

assert(exp, message)

#endif

使用斷言應注意的問題:

1)對非預期錯誤使用斷言。非預期錯誤包括空指標、輸入或輸出的引數值不在預期範圍內、陣列的越界等;

2)不要把需要執行的**放入斷言中。斷言用於軟體的開發和維護,通常不在發行版本中包含斷言。把需要執行的**放入斷言中,在發行版本中這些**通常不會被執行;

3)對**於內部系統的可靠資料使用斷言,而不要對外部不可靠資料使用斷言,對於外部不可靠資料應該使用錯誤處理**。

《Windows核心程式設計》 防禦性程式設計 斷言

防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...

防禦性程式設計

2010 6 29 30 斷言 斷言是乙個肯定的語句。在程式執行過程中只要斷言恒為真,程式就正確。斷言條件只能包含不會修改程式狀態的測試條件。assert 條件 包含在標頭檔案 中。ifdef ndebug define assert condition void 0 else void asser...

防禦性程式設計

1,防禦性程式設計。必要時應當考慮採取保護性拷貝的手段來保護內部的私有資料,先來看下面這個例子 pubic final class period public date getstart public date getend 這個類存在兩個不安全的地方,首先來看第乙個攻擊 date start ne...