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的hover方法让鼠标经过li时背景变色
Sep 06 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
Aug 06 Javascript
Three.js学习之正交投影照相机
Aug 01 Javascript
BootStrap Typeahead自动补全插件实例代码
Aug 10 Javascript
jQuery ztree实现动态树形多选菜单
Aug 12 Javascript
利用Angularjs和Bootstrap前端开发案例实战
Aug 27 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
Dec 17 Javascript
react-native之ART绘图方法详解
Aug 08 Javascript
vue实现多个元素或多个组件之间动画效果
Sep 25 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
Sep 24 Javascript
Element-UI 使用el-row 分栏布局的教程
Oct 26 Javascript
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
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
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
图书管理程序(一)
2006/10/09 PHP
php下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
PHP PDO操作总结
2014/11/17 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
Python入门篇之条件、循环
2014/10/17 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
浅析Python数据处理
2018/05/02 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
使用Scrapy爬取动态数据
2018/10/21 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
5.1手机促销活动
2014/01/17 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript