ATLASSERT

ATLASSERT與assert一樣,用於斷言。

斷言

所謂斷言,其實是防止程式意外出錯的一種宏,如果其參數計算為假,則程式發出警告,且退出。

最常見的用法就是在函式入口處保證輸入參數的正確性。

詳細

在 crtdefs.h 頭檔案中聲明為:#define ATLASSERT(expr) _ASSERTE(expr)

而_ASSERTE(expr)為:#define _ASSERTE(expr) _ASSERT_EXPR((expr), _CRT_WIDE(#expr))

--------------------------------------------------------------------------------------------------

簡單說就是:#define ATLASSERT(expr) _ASSERT_EXPR((expr), _CRT_WIDE(#expr))

其中_ASSERT_EXPR(A,B) 是用於根據A判斷是否以彈窗形式拋出B信息

而expr就是A,#expr就是B(注意:VC裡面會把預編譯中的#後面的占位符的值原封輸出。)

所以如果用ATLASSERT(!"ABCD");

輸出中包括了嘆號和雙引號~ 輸出中包括了嘆號和雙引號~

就會出現如下彈窗(注意嘆號和雙引號都被顯示出來了~):

舉例

例如有一個單鍊表,無頭,單向不循環,結點含data,next,現在寫一個函式,獲取指針所指結點的下一個結點的data:

int GetNext(pNode* pn)

{

//如果為空,則出錯,因為沒有後續結點,沒有這一條的話如果傳入NULL則程式運行出錯

ATLASSERT(pn!= NULL)

return(pn->next->data);

}

相關詞條

相關搜尋

熱門詞條

聯絡我們