linux系统下使用assert函数的方法。下面是小编精心收集的资料供大家参考!
步骤如下assert宏的原型定义在《assert.h》中其作用是如果它的条件返回错误则终止程序执行原型定义
#include 《assert.h》
1
void assert( int expression);assert的作用是现计算表达式expression 如果其值为假(即为0)那么它先向stde rr打印一条出错信息
然后通过调用abort来终止程序运行。
请看下面的程序清单ba dpt r.c
#include 《stdio.h》
#include 《assert.h》
#include 《stdlib.h》
2
int main(void)
{
FILE*fp;fp=fope n(test.txt w);//以可写的方式打开一个文件如果不存在就创建一个同名文件assert(fp); //所以这里不会出错fc lo s e(fp);fp=fo pen(noexitfile.txt r);//以只读的方式打开一个文件如果不存在就打开文件失败
3
assert(fp); //所以这里出错fc lo s e(fp); //程序永远都执行不到这里来return 0;
}
[root@localhost error_process]#gcc badptr.c
[root@localhost erro r_process]# 。 /a.outa.out badptr.c:14 main Asse rtio n `fp‘faile d.
4
已放弃
使用assert的缺点是频繁的调用会极大的影响程序的性能增加额外的开销。
在调试结束后可以通过在包含#include 《assert.h》的语句之前插入#define NDEBUG来禁用assert调用示例代码如下
#include 《stdio.h》
#define NDEBUG
#include 《assert.h》
5
用法总结与注意事项
1)在函数开始处检验传入参数的合法性如int resetBuffe rSize(int nNewSize)
{
//功能改变缓冲区大小
//参数 nNewSize缓冲区新长度
6
//返回值缓冲区当前长度
//说明保持原信息内容不变nNewSize 《=0表示清除缓冲区assert(nNewSize 》 =0);assert(nNewSize 《=MAX_BUFFER_SIZE);
。 。 。
}
2)每个assert只检验一个条件 因为同时检验多个条件时如果断言失败无法直观的判断是哪个条件失败
7
不好 assert(nOffset》=0&&nOffset+nS ize
《=m_nInfomationSize);
好 assert(nOffset 》 =0);assert(nOffset+nSize 《=m_nInfomationSize);
3)不能使用改变环境的语句 因为assert只在DEBUG个生效如果这么做会使用程序在真正运行时遇到问题
错误 assert(i++ 《 100)
这是因为如果出错 比如在执行之前i=100那么这条语句就不会执行那么i++这条命令就没有执行。
8
正确 assert(i 《 100)i++;
4)assert和后面的语句应空一行 以形成逻辑和视觉上的一致感
5)有的地方 assert不能代替条件过滤
9
快云科技怎么样?快云科技是一家成立于2020年的新起国内主机商,资质齐全 持有IDC ICP ISP等正规商家。我们秉承着服务于客户服务于大众的理念运营,机器线路优价格低。目前已注册用户达到5000+!主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机!产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国...
sharktech怎么样?sharktech (鲨鱼机房)是一家成立于 2003 年的知名美国老牌主机商,又称鲨鱼机房或者SK 机房,一直主打高防系列产品,提供独立服务器租用业务和 VPS 主机,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹,所有产品均提供 DDoS 防护。此文只整理他们家10Gbps专用服务器,此外该系列所有服务器都受到高达 60Gbps(可升级到 100Gbps)的保护。...
虎跃科技怎么样?虎跃科技(虎跃云)是一家成立于2017年的国内专业服务商,专业主营云服务器和独立服务器(物理机)高防机房有着高端华为T级清洗能力,目前产品地区有:山东,江苏,浙江等多地区云服务器和独立服务器,今天虎跃云给大家带来了优惠活动,为了更好的促销,枣庄高防BGP服务器最高配置16核32G仅需550元/月,有需要的小伙伴可以来看看哦!产品可以支持24H无条件退款(活动产品退款请以活动规则为准...