C 程式設計思想 卷二 防禦性程式設計

2021-05-25 18:37:29 字數 758 閱讀 2683

assert()巨集斷言定義在標頭檔案中

典型的assert()實現:

#ifdef ndebug

#define assert(cond) ((void) 0)

#else

void assertimpl(const char*, const char*, long);

#define assert(cond) /

((cond) ? (void)0 : assertimpl(???))

#endif

定義ndebug巨集並重新編譯程式,會自動去掉說有斷言**。

如果想開啟或關閉程式中某些位置的斷言,不但必須#define或#undef ndebug,而且必須重新包含。

斷言中只能包含不會修改程式狀態的測試條件。

斷言的意圖是驗證設計決定,造成它失敗的唯一原因應該是程式邏輯有缺陷。

在任何時間使用斷言來測試任何不變數都是合適的。

使用斷言可以在程式**真正出現問題之前,幫助程式設計人員找到其中的邏輯錯誤。

先編寫單元測試程式是一種能夠確保將要編寫的**能夠正確工作的最好方法。

測試程式 + 編碼  比直接編碼更快

用於**跟蹤的巨集:

#define trace(arg) cout << #arg << endl; arg

通常的記憶體分配問題包括:

1.對不是在動態儲存區上分配的記憶體誤使用delete

2.多次重複釋放在動態儲存區上分配的乙個記憶體

3.最常見的情況是忘記刪除乙個指標

防禦性程式設計

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...

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

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