1,典型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巨集,asset()蛻化為表示式(void)0,是一條無意義的語句.
除錯模式:否則assert(cond)被擴充套件成條件語句.
cond不為0時,無意義,程式正常執行.
cond為0時,執行函式assertimpl().
#include
#include
using namespace std;
int main()
輸出:assertion failed: m==n, file e:\c++\interview\debugtool\main.cpp, line 10
2,自己實現乙個myassert巨集.
#include
#include
using namespace std;
#ifdef ndebug
#define myassert(cond) ((void)0)
#else
void myfunc(const char* pexpression ,const char* pfile, int linenum)
#define myassert(cond) \
((cond)? (void)0:myfunc(#cond,__file__,__line__))
#endif
int main()
輸出:myassert failed: m==n, file e:\c++\interview\debugtool\main.cpp, line 22
《Windows核心程式設計》 防禦性程式設計 斷言
防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...
《Windows核心程式設計》 防禦性程式設計 斷言
防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...
防禦性程式設計
2010 6 29 30 斷言 斷言是乙個肯定的語句。在程式執行過程中只要斷言恒為真,程式就正確。斷言條件只能包含不會修改程式狀態的測試條件。assert 條件 包含在標頭檔案 中。ifdef ndebug define assert condition void 0 else void asser...