防禦性程式設計之一 斷言assert

2021-08-30 11:53:14 字數 1139 閱讀 6258

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