代码assert函数用用法[重点]

assert函数  时间:2021-02-26  阅读:()

assert()函数用法总结assert宏的原型定义在<assert.h>中其作用是如果它的条件返回错误则终止程序执行原型定义

#include <assert.h>void assert( int expression ) ;

复制代码assert的作用是现计算表达式expression 如果其值为假即为0 那么它先向stderr打印一条出错信息然后通过调用abort来终止程序运行。请看下面的程序清单badptr.c

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>int main( void )

{

FILE *fp;fp = fopen( "test.txt", "w" ) ;//以可写的方式打开一个文件如果不存在就创建一个同名文件assert( fp ) ; //所以这里不会出错fclose( fp ) ;fp = fopen( "noexitfile.txt", "r" ) ; //以只读的方式打开一个文件如果不存在就打开文件失败assert( fp ) ; //所以这里出错fclose( fp ) ; //程序永远都执行不到这里来return 0;

}

复制代码

[root@localhost error_process]#gcc badptr.c

[root@localhost error_process]#./a.outa.out: badptr.c:14:main:Assertion `fp' fai led.

已放弃使用assert()的缺点是频繁的调用会极大的影响程序的性能增加额外的开销。在调试结束后可以通过在包含#include <assert.h>的语句之前插入#defineNDEBUG来禁用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) ;

这是因为如果出错 比如在执行之前i=100那么这条语句就不会执行那么i++这条命令就没有执行。

正确assert(i < 100) ;i++;

复制代码

4 assert和后面的语句应空一行 以形成逻辑和视觉上的一致感。

5有的地方 assert不能代替条件过滤。

Ftech:越南vps,2核/2G/20G SSD/1Gbps不限流量/可安装Windows系统,$12.5月

ftech怎么样?ftech是一家越南本土的主机商,成立于2011年,比较低调,国内知道的人比较少。FTECH.VN以极低的成本提供高质量服务的领先提供商之一。主营虚拟主机、VPS、独立服务器、域名等传统的IDC业务,数据中心分布在河内和胡志明市。其中,VPS提供1G的共享带宽,且不限流量,还可以安装Windows server2003/2008的系统。Ftech支持信用卡、Paypal等付款,但...

易探云服务器怎么过户/转让?云服务器PUSH实操步骤

易探云服务器怎么过户/转让?易探云支持云服务器PUSH功能,该功能可将云服务器过户给指定用户。可带价PUSH,收到PUSH请求的用户在接收云服务器的同时,系统会扣除接收方的款项,同时扣除相关手续费,然后将款项打到发送方的账户下。易探云“PUSH服务器”的这一功能,可以让用户将闲置云服务器转让给更多需要购买的用户!易探云服务器怎么过户/PUSH?1.PUSH双方必须为认证用户:2.买家未接收前,卖家...

亚洲云-浙江高防BGP,至强铂金8270,提供自助防火墙管理,超大内存满足你各种需求

官方网站:点击访问亚洲云官网618活动方案:618特价活动(6.18-6.30)全站首月活动月底结束!地区:浙江高防BGPCPU:至强铂金8270主频7 默频3.61 睿频4.0核心:8核(最高支持64核)内存:8G(最高支持128G)DDR4 3200硬盘:40G系统盘+80G数据盘带宽:上行:20Mbps/下行:1000Mbps防御:100G(可加至300G)防火墙:提供自助 天机盾+金盾 管...

assert函数为你推荐
google地球打不开为什么google earth打不开如何免费开通黄钻如何免费开通黄钻??打开网页出现错误为什么打不开网页,出错百度抢票浏览器猎豹浏览器,360抢票,百度卫士抢票哪个抢票工具好?1433端口路由器1433端口怎么开启照片转手绘美图秀秀可以照片转手绘吗?是手机版的直播加速有没有软件使已经下载好了的视频播放加速,例如30分钟的视频15分钟或者20分钟播放完硬盘人上海人说“硬盘”是什么梗畅想中国畅想中国发展前景bt封杀北京禁用BT下载,是真的吗?为什么?
域名注册使用godaddy php空间租用 3322动态域名 hkbn awardspace lunarpages 表格样式 dropbox网盘 40g硬盘 帽子云 爱奇艺vip免费试用7天 免费申请个人网站 vip域名 个人免费主页 根服务器 网通服务器 dnspod 注册阿里云邮箱 万网注册 阿里dns 更多