(2010-6-29
~30)斷言:斷言是乙個肯定的語句。在程式執行過程中只要斷言恒為真,程式就正確。
斷言條件只能包含不會修改程式狀態的測試條件。
assert(
條件);
包含在標頭檔案
中。#ifdef ndebug
#define assert(condition)((void)0)
#else
void assertimpl(const char*, const char*, long);
#define assert(condition) /
((condition) ? (void)0 : assertimpl(???))
#endif
如果condition
為真,程式就正常執行;否則,就說明程式異常,這時會中斷程式執行,輸出引發斷言錯誤的表示式、它所在的檔名和行號列印出來並結束程式的執行。
當在debug
模式時,斷言起作用,非
debug
(ndebug
)時,斷言就不作用了。因為斷言會影響到程式的執行效率,所以通常在發放版本時就
#define ndebug
把斷言關閉。
要知道什麼情況下該使用斷言什麼情況下該使用異常處理。不是所有情況下都應該使用斷言,譬如:如果某個條件不完全在程式的控制之下,那麼就不應該使用斷言。任何時候使有斷言來檢測任何不變數都是合適的,包括在乙個函式結束時測試後置條件,將這種方法用於維護物件狀態的類成員函式特別合適。
(cppunit
自動單元測試框架)
測試時考慮:
1)邊界條件
2)函式是否會被破壞掉
3)什麼情況會造成程式的破壞
防禦性程式設計
1,防禦性程式設計。必要時應當考慮採取保護性拷貝的手段來保護內部的私有資料,先來看下面這個例子 pubic final class period public date getstart public date getend 這個類存在兩個不安全的地方,首先來看第乙個攻擊 date start ne...
《Windows核心程式設計》 防禦性程式設計 斷言
防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...
《Windows核心程式設計》 防禦性程式設計 斷言
防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...