assert() 函数用法(转)
来源:互联网 发布:微博数据采集 编辑:程序博客网 时间:2024/06/10 09:45
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include <stdio.h>
#define NDEBUG
#include <assert.h>
用法总结与注意事项:
1)在函数开始处检验传入参数的合法性
如:
int resetBufferSize(int nNewSize)
{
//功能:改变缓冲区大小,
//参数:nNewSize 缓冲区新长度
//返回值:缓冲区当前长度
//说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE);
...
}
2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
不好: assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
好: assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);
3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题
错误: assert(i++ < 100)
因为当使用了#define NDEBUG 禁用了assert,i的值就不会被加1了,这也许是不期望的。
正确: assert(i < 100)
i++;
4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感
5)有的地方,assert不能代替条件过滤
注意:当对于浮点数:
#include<assert.h>
// float pi=3.14;
// assert(pi=3.14); //
float pi=3.14f;
assert (pi==3.14f);
- assert() 函数用法(转)
- (转)assert()函数用法总结
- 转:assert()函数用法总结
- 转:assert() 函数用法
- 转:assert() 函数用法
- 转: assert()函数用法总结
- assert() 函数用法 (转载)
- assert()函数用法总结
- assert()函数用法总结
- [转]assert() 函数用法
- assert()函数的用法总结
- assert() 函数用法
- assert() 函数用法
- assert() 函数用法
- assert() 函数用法
- [转帖]assert 函数用法
- assert() 函数用法
- assert函数用法
- test
- 数学之美 系列十五 繁与简 自然语言处理的几位精英
- 异口同声 冼 夺主同语录
- IE6下png透明的问题
- (小小心得)Ophone开发者、玩家社区推荐!
- assert() 函数用法(转)
- 闭包Closure
- 拓扑排序 (java)
- autorun.inf的免疫 攻防
- 2.1.3端口绑定与监听
- 正在学习研究中!!!!
- 091105(星期四)消息反射的基础知识
- 求智能搜索引擎中同义词的结构算法。。。
- 架构师的要害