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 相关文章推荐
动态刷新 dorado树的js代码
Jun 12 Javascript
js 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
javascript批量修改文件编码格式的方法
Jan 27 Javascript
js选择器全面解析
Jun 27 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
js仿拉勾网首页穿墙广告效果
Mar 08 Javascript
angularjs性能优化的方法
Sep 05 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
Apr 17 Javascript
使用Vue 实现滑动验证码功能
Jun 27 Javascript
浅谈Vue中render中的h箭头函数
Nov 07 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
Terran剧情介绍
2020/03/14 星际争霸
初探PHP5
2006/10/09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python将ansible配置转为json格式实例代码
2017/05/15 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
校园环保广播稿(3篇)
2014/09/15 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
北京天坛导游词
2015/02/12 职场文书
商场营业员岗位职责
2015/04/14 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
pandas进行数据输入和输出的方法详解
2022/03/23 Python
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS