ASSERT与VERIFY宏的区别
来源:互联网 发布:mac pdf编辑器 编辑:程序博客网 时间:2024/04/27 13:24
1 ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。
2 ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。
VERIFY 与ASSERT用在程序调试上并无本质上的区别。
断言类型
定义
ANSI C 断言
void assert(int expression );
C Runtime Lib 断言
_ASSERT( booleanExpression );
_ASSERTE( booleanExpression );
MFC 断言
ASSERT( booleanExpression );
VERIFY( booleanExpression );
ASSERT_VALID( pObject );
ASSERT_KINDOF( classname, pobject );
ATL 断言
ATLASSERT( booleanExpression );
此外,TRACE() 宏的编译也受 _DEBUG 控制。
所有这些断言都只在 Debug版中才被编译,而在 Release 版中被忽略。唯一的例外是 VERIFY() 。事实上,这些宏都是调用了 assert() 函数,只不过附加了一些与库有关的调试代码。如果你在这些宏中加入了任何程序代码,而不只是布尔表达式(例如赋值、能改变变量值的函数调用等),那么 Release 版都不会执行这些操作,从而造成错误。初学者很容易犯这类错误,查找的方法也很简单,因为这些宏都已在上面列出,只要利用 VC++ 的 Find in Files 功能在工程所有文件中找到用这些宏的地方再一一检查即可。另外,有些高手可能还会加入 #ifdef _DEBUG 之类的条件编译,也要注意一下。
顺便值得一提的是 VERIFY() 宏,这个宏允许你将程序代码放在布尔表达式里。这个宏通常用来检查 Windows API 的返回值。有些人可能为这个原因而滥用 VERIFY() ,事实上这是危险的,因为 VERIFY() 违反了断言的思想,不能使程序代码和调试代码完全分离,最终可能会带来很多麻烦。因此,专家们建议尽量少用这个宏!
2 ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。
VERIFY 与ASSERT用在程序调试上并无本质上的区别。
断言类型
定义
ANSI C 断言
void assert(int expression );
C Runtime Lib 断言
_ASSERT( booleanExpression );
_ASSERTE( booleanExpression );
MFC 断言
ASSERT( booleanExpression );
VERIFY( booleanExpression );
ASSERT_VALID( pObject );
ASSERT_KINDOF( classname, pobject );
ATL 断言
ATLASSERT( booleanExpression );
此外,TRACE() 宏的编译也受 _DEBUG 控制。
所有这些断言都只在 Debug版中才被编译,而在 Release 版中被忽略。唯一的例外是 VERIFY() 。事实上,这些宏都是调用了 assert() 函数,只不过附加了一些与库有关的调试代码。如果你在这些宏中加入了任何程序代码,而不只是布尔表达式(例如赋值、能改变变量值的函数调用等),那么 Release 版都不会执行这些操作,从而造成错误。初学者很容易犯这类错误,查找的方法也很简单,因为这些宏都已在上面列出,只要利用 VC++ 的 Find in Files 功能在工程所有文件中找到用这些宏的地方再一一检查即可。另外,有些高手可能还会加入 #ifdef _DEBUG 之类的条件编译,也要注意一下。
顺便值得一提的是 VERIFY() 宏,这个宏允许你将程序代码放在布尔表达式里。这个宏通常用来检查 Windows API 的返回值。有些人可能为这个原因而滥用 VERIFY() ,事实上这是危险的,因为 VERIFY() 违反了断言的思想,不能使程序代码和调试代码完全分离,最终可能会带来很多麻烦。因此,专家们建议尽量少用这个宏!
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY宏的区别
- ASSERT与VERIFY的区别
- ASSERT与VERIFY的区别
- ASSERT 与 VERIFY 区别
- assert与verify区别
- MFC程序中ASSERT与VERIFY两个宏的区别
- MFC中VERIFY与ASSERT的区别
- ASSERT VERIFY TRACE的区别与应用
- ASSERT与VERIFY宏
- ASSERT和VERIFY的区别
- verify和assert的区别
- verify和assert的区别
- 我的 CSDN 博客样式
- 一个防止直线走样的函数
- MFC框架中WM_COMMAND消息响应顺序
- 点击之间 一件不少 仅在淘挖网
- 栈和堆的区别
- ASSERT与VERIFY宏的区别
- VC++中数据类型转换总结
- 理解互斥量和信号量 作者: JuKevin
- Repeater 实现 DataList 多列
- 简述java枚举类型
- c++字符类型总结
- 实例化beanfactory的三种方法
- 由__declspec宏引发的关于输出函数方法的问题
- Apache 下更改 DocumentRoot 和新建虚拟目录