struct __POSITION{}和ASSERT
ASSERT与VERIFY宏有什么区别:
1 ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。
2 ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。
VERIFY 与ASSERT用在程序调试上并无本质上的区别
顺便值得一提的是 VERIFY() 宏,这个宏允许你将程序代码放在布尔表达式里。这个宏通常用来检查 Windows API 的返回值。有些人可能为这个原因而滥用 VERIFY() ,事实上这是危险的,因为 VERIFY() 违反了断言的思想,不能使程序代码和调试代码完全分离,最终可能会带来很多麻烦。因此,专家们建议尽量少用这个宏。
VC的基本头文件AFX.h里对POSITION是这样定义的:
struct __POSITION { };
typedef __POSITION* POSITION
显然这里定义了一个没有任何字段的结构体,而POSITION是这个结构体的指针。
VC在使用CList时,一些函数往往用POSITION参数,或者返回POSITION类型,其实查看CList的原代码就知道,原来CList返回的POSITION就是它的链表的一个结点指针,也就是说,在CList里有一个CNode的类定义了结点,而POSITION就是CNode*
所以说,虽然__POSITION结构体没有任何字段,但用POSITION结构体指针,仅仅用来表达CNode*指针,并且是强制转换过来的。于是POSITION被VC用为一种常见的数据类型---32位指针。