assert()函数用法总结(推荐)


Posted in Javascript onJanuary 25, 2017

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.out 
a.out: badptr.c:14: main: Assertion `fp' failed.

已放弃使用assert()的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#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);

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

正确:

assert(i < 100);
 i++;

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

5)有的地方,assert不能代替条件过滤。

以上所述是小编给大家介绍的assert()函数用法总结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于jquery的跨域调用文件
Nov 19 Javascript
『jQuery』取指定url格式及分割函数应用
Apr 22 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
Jul 04 Javascript
jQuery关于导航条背景切换效果实现示例
Sep 04 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
Nov 22 Javascript
js/jquery解析json和数组格式的方法详解
Jan 09 Javascript
一段非常简单的js判断浏览器的内核
Aug 17 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
JavaScript表单验证的两种实现方法
Feb 11 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
Mar 20 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
Jun 12 Javascript
VueJS 组件参数名命名与组件属性转化问题
Dec 03 Javascript
canvas知识总结
Jan 25 #Javascript
基于JavaScript实现自定义滚动条
Jan 25 #Javascript
基于javascript实现数字英文验证码
Jan 25 #Javascript
js阻止移动端页面滚动的两种方法
Jan 25 #Javascript
servlet+jquery实现文件上传进度条示例代码
Jan 25 #Javascript
json数据处理及数据绑定
Jan 25 #Javascript
详解jQuery中ajax.load()方法
Jan 25 #Javascript
You might like
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
多广告投放代码 推荐
2006/11/13 Javascript
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python opencv之分水岭算法示例
2018/02/24 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
委托公证书范本
2014/04/03 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
2016保送生自荐信范文
2016/01/29 职场文书