struct __POSITION{}和ASSERT
ASSERT與VERIFY宏有什么區(qū)別:
??? 1 ASSERT與VERIFY宏在Debug模式下作用基本一致,二者都對(duì)表達(dá)式的值進(jìn)行計(jì)算,如果值為非0,則什么事也不做;如果值為0,則輸出診斷信息。
??? 2 ASSERT與VERIFY宏在Release模式下效果完全不一樣。ASSERT不計(jì)算表達(dá)式的值,也不會(huì)輸出診斷信息;VERIFY計(jì)算表達(dá)式的值,但不管值為0還是非0都不會(huì)輸出診斷信息。
VERIFY?? 與ASSERT用在程序調(diào)試上并無(wú)本質(zhì)上的區(qū)別
順便值得一提的是?VERIFY() 宏,這個(gè)宏允許你將程序代碼放在布爾表達(dá)式里。這個(gè)宏通常用來(lái)檢查 Windows API 的返回值。有些人可能為這個(gè)原因而濫用 VERIFY() ,事實(shí)上這是危險(xiǎn)的,因?yàn)?VERIFY() 違反了斷言的思想,不能使程序代碼和調(diào)試代碼完全分離,最終可能會(huì)帶來(lái)很多麻煩。因此,專(zhuān)家們建議盡量少用這個(gè)宏。
??VC的基本頭文件AFX.h里對(duì)POSITION是這樣定義的:??
? struct?? __POSITION?? {?? };??
? typedef?? __POSITION*?? POSITION??
? 顯然這里定義了一個(gè)沒(méi)有任何字段的結(jié)構(gòu)體,而POSITION是這個(gè)結(jié)構(gòu)體的指針。??
???
? VC在使用CList時(shí),一些函數(shù)往往用POSITION參數(shù),或者返回POSITION類(lèi)型,其實(shí)查看CList的原代碼就知道,原來(lái)CList返回的POSITION就是它的鏈表的一個(gè)結(jié)點(diǎn)指針,也就是說(shuō),在CList里有一個(gè)CNode的類(lèi)定義了結(jié)點(diǎn),而POSITION就是CNode*??
???
? 所以說(shuō),雖然__POSITION結(jié)構(gòu)體沒(méi)有任何字段,但用POSITION結(jié)構(gòu)體指針,僅僅用來(lái)表達(dá)CNode*指針,并且是強(qiáng)制轉(zhuǎn)換過(guò)來(lái)的。于是POSITION被VC用為一種常見(jiàn)的數(shù)據(jù)類(lèi)型---32位指針。
轉(zhuǎn)載于:https://www.cnblogs.com/fujinliang/archive/2012/11/13/2767391.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的struct __POSITION{}和ASSERT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 149元!小米全新67W氮化镓充电器开售
- 下一篇: 关于工程技术中PE、ME、TE、IE、E