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 常用方法经典总结
Jan 28 Javascript
js 复制或插入Html的实现方法小结
May 19 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
Aug 22 Javascript
js中的事件捕捉模型与冒泡模型实例分析
Jan 10 Javascript
解决URL地址中的中文乱码问题的办法
Feb 10 Javascript
React如何将组件渲染到指定DOM节点详解
Sep 08 Javascript
通过源码分析Vue的双向数据绑定详解
Sep 24 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 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
php 删除cookie方法详解
2014/12/01 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
python网络编程示例(客户端与服务端)
2014/04/24 Python
python字符串替换示例
2014/04/24 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python数据集切分实例
2018/12/08 Python
详解python配置虚拟环境
2019/04/08 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
竞选班干部演讲稿
2014/04/24 职场文书
消防安全宣传口号
2014/06/10 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
医院见习报告范文
2014/11/03 职场文书
个人承诺书格式范文
2015/04/29 职场文书
公司备用金管理制度
2015/08/04 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python