关于程序中的assert
来源:互联网 发布:刷recovery软件 编辑:程序博客网 时间:2024/06/05 23:16
作者: Crazii @ CSDN
摘自我的百度博客: http://hi.baidu.com/%CF%F4%CA%AE%C8%FD%C0%C9/blog/item/687d1af44fdbfbe67709d73b.html
assert在debug模式下是很有用的,可以比较方便的发现错误.assert是个宏,至于这个宏的定义可以去看看头文件了.
而在release版本下面,assert会被优化掉.所以这里需要注意assert的用法: 不要将同时具有功能性语句放在assert中,因为它在release下会被优化掉.
举个例子吧:
1.一个纯粹检查性的语句,非功能性的:
std::set<int> iset;
std::set<int>::iterator isetIter= iset.begin();
assert( isetIter != iset.end() ); //there's no problem when performing a check
2.功能性的检查语句:
1)
bool loadImage( std::string& filename);
assert( loadImage("testimage.img" ) ); //not only a check,but a funtionality with a result check.but in release mode,the whole funtionality would be striped off for optimization
2)
LPDIRECT3DDEVICE9 pDevice;//假设已经初始化
LPDIRECT3DTEXTURE9 pTexture;
assert( SUCCEEDED( D3DXCreateTextureFromFile(m_pDevice,"foobar.tga",&pTexture) ) );
当然在debug模式下,不会出现问题,但这正是应该注意的地方.assert会在release下被优化相信几乎所有人都知道.但是我曾经犯这个错误的时候,我也已经知道assert会被优化掉.
realse下的问题:
1.纯检查性的语句当然没有问题了.
2.带有功能性的,整个assert语句被优化掉.
所以对于2.1)来说,loadimage根本没有被执行.2.2)的D3DXCreateTextureFromFile 也没有被执行..问题就在这里.
所以正确的写法应该是:
1) bool ret = loadImage("testimage.img" );
asssert( ret ); //you better do it like this
2) HRESULT hres = D3DXCreateTextureFromFile(m_pDevice,"foobar.tga",&pTexture);
assert( SUCCEEDED(hres) ); //ha,this is the right way,only this one being stripped off in release mode.
- 关于程序中的assert
- 关于c中的assert
- 关于java 中的assert 关键字
- 关于JAVA中的断言Assert
- 程序中的exit(1)、abort()、assert(0);
- assert , ASSERT中的void
- 关于assert
- 关于ASSERT
- 关于ASSERT
- 关于assert,ASSERT,TRACE,VERIFY
- 关于assert,ASSERT,TRACE,VERIFY
- 关于assert,ASSERT,TRACE,VERIFY
- assert()将程序终止
- assert 调试程序
- C关于assert
- 关于Visual Assert
- 关于c使用assert
- 关于assert,ASSERT,TRACE和VERIFY
- 最短路径(java)
- 开发常用的一些网站(收藏)
- 我终于活着回来了!
- SQL Server的存储过程调用dll
- Build WebKit under Ubuntu9.04
- 关于程序中的assert
- fms技术
- IT精英,必须掌握的命令行
- VB 字符串处理函数集
- NHibernate教程
- 页面验证码的实现
- 分块云计算
- 简单查询,返回数据库结构(非基于对象的查询,复杂查询)
- 检测SQL--csh