首先要確認一點,使用斷言可以驗證你的程式是否有效,但並不表示你的程式是正確的.
下面開始介紹各種型別斷言:
一.c執行時斷言:
它宣告在:crtdbg.h中,有如下兩個斷言:
1->_assert(booleanexpression);
2->_asserte(booleanexpression);
其中,_asserte巨集顯示失效的斷言語句,而但它不支援unicode!
二.mfc庫中的斷言
1->assert(booleanexpression);
它是mfc中使用最多的斷言,在mfc程式設計中,建議使用它!具體原因??----看mfc源**就知道了:)
2->verify(booleanexpression);
verify巨集和assert巨集最大的區別是:verify中的布林表示式在發行版中會被保留下來!這是因為assert只用於debug模式中,而verify可以用於release模式中!但發問一句:在release版本中使用斷言,你的目的是什麼?讓使用者除錯程式?-----建議只使用assert,盡量不使用verify巨集
3->assert_valid(pobjectderiverdfromcobject);
它用於判定乙個指向cobject派生類的物件的指標是否有效,建議在使用cobject派生類的物件之前都要呼叫assert_valid巨集
4->assert_kindof(classname,pobjectderivedfromcobject);
這個巨集用來驗證指向cobject派生類物件的指標是否從classname中派生而來,但它並不檢查指標是否有效,因而建議在使用assert_kindof巨集之前,呼叫assert_valid巨集
下面是兩個沒有正式公開的assert巨集:
5->assert_pointer(pointer,pointertype);
它判斷指標是否為否,當指標不能為空的時候,使用它
6->assert_null_or_pointer(pointer,pointertype);
當指標可以為空的時候,使用它
下面介紹一下另外兩個有用的函式:
1->bool afxisvalidaddress(const void *memoryaddress,uint memorybytes,bool iswritable=true);
它用來決定呼叫程序對於某個給定大小的記憶體塊是否具有讀寫許可權
2->bool afxisvalidstring(lpcstr string,int stringlength=-1);
它用來決定乙個呼叫程序對於某個給定長度的字串是否具有讀許可權
什麼時候需要斷言:
1->檢查函式的輸入:驗證引數.相關資料成員.相關全域性變數等等
2->檢查函式的輸出
3->檢查物件的狀態:物件是否被正確地初始化等等
4->檢查邏輯變數的合理性和一致性
5->檢查類中的不變數
參考文件:<>
VC MFC開發中的滑鼠事件的訊號傳遞
最近要用滑鼠事件控制點集的增刪改查等操作,特別是滑鼠的左鍵的lbttonup,lbuttondown等,同時控制了移動,旋轉,選單操作等,於是同乙個事件要控制這麼多響應事件,於是變數的傳遞就是重點了。先開始隨便寫了一些,埋了乙個大坑,導致了兩天半的時間都在找bug。下次如果寫 的時間小於調bug的時...
Visual C 中的斷言
斷言語句指定在程式的某些特定點應為真的條件。如果該條件不為真,則斷言失敗,中斷程式的執行,並顯示 斷言失敗 對話方塊。visual c 支援基於下列構造的斷言語句 mfc 程式的 mfc 斷言。使用 atl 的程式的 atlassert。使用 c 執行時庫的程式的 crt 斷言。其他 c c 程式的...
Python中的斷言
在python中,做出斷言的語句是assert,assert後面跟任何合法的表示式,assert語句做出乙個判斷,如果結果為true,則該語句不做任何事情,如果結果為false,assert語句會丟擲異常assertionerror,這個丟擲異常很有作用,我們可以在assert語句後加上解釋性語句,...