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 相关文章推荐
50个比较实用jQuery代码段
Sep 18 Javascript
javascript中window.event事件用法详解
Dec 11 Javascript
jquery简单实现鼠标经过导航条改变背景图
Dec 17 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
js+CSS实现弹出居中背景半透明div层的方法
Feb 26 Javascript
jQuery实现图片上传和裁剪插件Croppie
Nov 29 Javascript
jquery 正整数数字校验正则表达式
Jan 10 Javascript
微信小程序 支付功能实现PHP实例详解
May 12 Javascript
js实现随机数字字母验证码
Jun 19 Javascript
canvas基础绘制-绚丽倒计时的实例
Sep 17 Javascript
关于layui 下拉列表的change事件详解
Sep 20 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
一个oracle+PHP的查询的例子
2006/10/09 PHP
PHP生成静态页面详解
2006/12/05 PHP
php图片验证码代码
2008/03/27 PHP
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
vue 配置多页面应用的示例代码
2018/10/22 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
python获取图片颜色信息的方法
2015/03/18 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
python下载图片实现方法(超简单)
2017/07/21 Python
python中set()函数简介及实例解析
2018/01/09 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
python for循环remove同一个list过程解析
2019/08/14 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
学生评语大全
2014/04/18 职场文书
北京申奥口号
2014/06/19 职场文书
平安工地汇报材料
2014/08/19 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
学校社团活动总结
2015/05/07 职场文书