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
无忧云怎么样?无忧云值不值得购买?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。目前,四川雅安机房,4...
一、麻花云官网点击直达麻花云官方网站二、活动方案优惠码:专属优惠码:F1B07B 享受85折优惠。点击访问活动链接最新活动 :五一狂欢 惠战到底 香港云主机 1.9折起香港特价体验云主机CN2 云服务器最新上线KVM架构,,默认40G SSD,+10G自带一个IPv4,免费10Gbps防御,CPU内存带宽价格购买1核1G1M19元首月链接2核2G 2M92元/3个月链接2核4G3M112元/3个月...
介绍:819云怎么样?819云创办于2019,由一家从2017年开始从业的idc行业商家创办,主要从事云服务器,和物理机器819云—-带来了9月最新的秋季便宜vps促销活动,一共4款便宜vps,从2~32G内存,支持Windows系统,…高速建站的美国vps位于洛杉矶cera机房,服务器接入1Gbps带宽,采用魔方管理系统,适合新手玩耍!官方网站:https://www.8...