VC/MFC程序开发中的断言
来源:互联网 发布:linux cpio命令 编辑:程序博客网 时间:2024/06/06 08:51
首先要确认一点,使用断言可以验证你的程序是否有效,但并不表示你的程序是正确的.
下面开始介绍各种类型断言:
一.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->检查类中的不变量
参考文档:<<Debugging Windows Programs>>
- VC/MFC程序开发中的断言
- VC/MFC程序开发中的断言
- 断言在程序开发中的运用
- VC++中的ASSERT断言
- 非MFC程序的断言
- VC++中的MFC程序的执行过程
- VC++中的MFC程序的执行过程
- VC++中的MFC程序的执行过程
- VC++中的MFC程序的执行过程
- VC++中的MFC程序的执行过程
- VC/MFC开发中的句柄HWND
- MFC中,执行程序出现断言错误
- MFC 断言
- VC中的Win32应用程序和MFC程序有什么分别
- VC++编程:MFC程序中的WinMain入口函数
- VC++6.0下 开发MFC OLE DB用户程序
- 如何用VC、MFC开发一个尽可能小的程序???
- VC++MFC开发中的鼠标事件的信号传递
- java面试整理(二)[http://blog.csdn.net/mlovex/]
- Java 面试题及其答案
- 应聘Java笔试时可能出现问题及其答案
- 什么是 XDoclet?
- VC下利用Pro*C/C++开发Oracle接口程序
- VC/MFC程序开发中的断言
- 一些面试准备题(包括高质量c++题)
- 2005-11-15
- 手机游戏捧出中国大餐 Orange伙伴在华发力
- (一)ComponentOne之WebChart(饼图)(代码示例下载)
- (二)ComponentOne之WebChart(柱状图)(示例代码下载)
- 大量数据窗口使用小技巧
- 关于时区的换算.
- 母函数算法---组合数学