c语言中assert函数,assert()函数用法总结
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:
#include
#include
#include
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 的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include
#define NDEBUG
#include
用法总结与注意事项:
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不能代替条件过滤。
【C/C++】assert()函数用法总结
assert()函数用法总结 assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include ...
(转)assert()函数用法总结
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( in ...
转:assert()函数用法总结
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( in ...
C语言assert()函数用法总结
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( i ...
assert函数用法总结【转】
本文转载自:http://blog.csdn.net/u014082714/article/details/45190505 assert宏的原型定义在中,其作用是如果 ...
C/C++ assert()函数用法总结
1. 简介 assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行. 原型定义: #include void ass ...
assert()函数用法
assert是定义在头文件cassert中的宏 其作用是如果他的返回值不为真则终止程序. assert(expression); if 为假,先向stderr打印一条错误信息,再用abort终止程序 ...
assert函数应用
目录 1 assert概念 2 assert作用 3 assert用法 3.1 检测调用者传过来的指针参数是否正常 3.2 判断某个变量的范围 3.3 assert只检验一个地方 3.4 不能使用改变 ...
【php】assert函数的用法
[php]assert函数的用法 http://www.douban.com/note/217557007/ 2012-06-01 10:32:37 assert这个函数在php语言中是用来判断一 ...
随机推荐
C++ 应用处理异常崩溃(转载)
有时,在我们的程序运行的时候,会遇到一些崩溃问题,尤其是概率出现的时候,如果能捕获其异常,那么对于我们快速定位bug是很有帮助的 这里借用网上搜寻回来的函数,记录一下: 头文件及库: #include ...
开始跟踪Redis啦,开帖
随着NoSql的流行,对这方面的产品开始关注起来,之前一直只是看看.从昨天开始决定把Redis的实现机制啃下来,毕竟代码量也就2W行. 每天花时间看看,记录下成果. here we go.
Android: 启动另外的APP及传递参数(转)
转载自:http://blog.csdn.net/iefreer/article/details/8812585 有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等. 如果你不知道 ...
编写jquery插件的分享
一.类级别($.extend) 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(o ...
startActivityForResult和setResult详解
http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html startActivityForResult与startActivi ...
2.4 Git 基础 - 撤消操作
2.4 Git 基础 - 撤消操作 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失 ...
Python爬虫-01:爬虫的概念及分类
目录 # 1. 为什么要爬虫? 2. 什么是爬虫? 3. 爬虫如何抓取网页数据? # 4. Python爬虫的优势? 5. 学习路线 6. 爬虫的分类 6.1 通用爬虫: 6.2 聚焦爬虫: # 1. ...
Java开发中所遇问题积累
1.判断两个字符串是否相等时,如下,使用" == "无效: String name = "Jack"; if(name.equals("Jack&qu ...
PHP-Open Flash Chart学习一(swfobject知识)
首先必须了解下swfobject的知识 在网页里面插入swf再平常不过了, 一般会想到如下代码:
c语言中assert函数,assert()函数用法总结相关推荐
- C 语言中 char[] 的操作函数
C语言中char[]的操作函数 1.赋值操作 在C语言中,char型数组是不可以直接赋值的.例如在如下的代码中,会得到错误: char c1[20] = "women"; char ...
- C++语言中std::array的神奇用法总结,你需要知道!
摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...
- c语言常量的正确表示const,C语言中的const和free用法详解
注意:C语言中的const和C++中的const是有区别的,而且在使用VS编译测试的时候.如果是C的话,请一定要建立一个后缀为C的文件,不要是CPP的文件.因为,两个编译器会有差别的. 一.C语言中的 ...
- c语言中if和goto的用法,C语言中if和goto的用法.doc
C语言中if和goto的用法 C语言中,if是一个条件语句,用法??if(条件表达式) 语句如果满足括号里面表达式,表示逻辑为真于是执行后面的语句,否则不执行(表达式为真则此表达式的值不为0,为假则为 ...
- go语言中error的分类与用法
go语言中error的分类与用法 原文引用:极客时间中的课程<Go error处理最佳实践> 前言:本文要讨论的就是go中error的基本原理/类型,以及最重要的几个问题: go代码开发中 ...
- 在c语言中while与do-while,C语言中while /do while语句用法
C语言中while /do while语句用法 C语言while语句的用法 while语句的一般形式为:while(表达式)语句 其中表达式是循环条件,语句为循环体. while语句的语义是:计算表达 ...
- c语言while break用法举例,c语言中continue和break的用法
目前,随着计算机在人们生活和工作中的普及,其教学研究地位也在逐渐提升.C语言是一种计算机程序设计语言,其具有高级语言和汇编语言的特点.下面小编就跟你们详细介绍下c语言中continue和break的用 ...
- c语言do while语句用法6,C语言中while /do while语句用法
摘要 腾兴网为您分享:C语言中while /do while语句用法,仙乐,同程旅游,天猫超市,闪送等软件知识,以及上网本系统,酷我音乐mac,美版微信,地基承载力计算,云解压,猫咪咖啡馆游戏,智课雅 ...
- c语言中fmod()函数和log10()函数用法
C语言中fmod函数的功能是x/y的求余运算,适用于double ,float,long double,如果y=0的话,那么返回 值得一提的是%,'%'同样是取余,但是% 适用于整数取余,%是整数的取 ...
- C语言中fputc和fgetc函数用法
C语言中文件的读写函数之 fputc.fgetc 首先,我们要知道fputs和fgetc这两个函数是包含在标准库函数中的函数,换句话说,就是封装在标准函数中的两个函数.其中这两个函数都是每次只能输入或 ...
最新文章
- 阿里CTO张建锋:云拐点已至,All in cloud;贾扬清完整title公开
- DPM(Deformable Parts Model)--原理(一)
- (转)博弈问题与SG函数
- docker mysql编辑器_docker官方mysql镜像自定义配置详解
- 判断两线段是否相交——快速排斥与跨立实验
- Tmux : GNU Screen 的替代品
- C#算法设计查找篇之03-插值查找
- 用一个比特币买一辆Model3?马斯克血洗空头后,苹果也要跟?
- centos7.2编译php,CentOS7.2编译安装PHP7.2.3之史上最详细步骤。
- 年底双薪一般是什么时候发_评职称发表文章一般发什么刊物
- wifipumpkin3 WiFi钓鱼工具
- 日常小tip_Bat命令运行Java程序
- 国家统计局可以获取到全国5级行政区域数据
- 安装移动视频监控 即时监控地铁车厢
- MySQL日志之Undo日志
- 计算机教师的幸福,有关信息技术教师教育感言
- java中倒三角形和正三角形_正三角形,倒三角形,以及正倒三角
- 彻底解决win10时间同步失败
- 2023浙江工商大学计算机考研信息汇总
- java万能引用_Java的四种引用方式
热门文章
- FPS教程附带源码 更换基址 编译可用 包括csgo cf
- 【elk】网络设备syslog日志收集
- Python+Django毕业设计校园食堂订餐系统(程序+LW+部署)
- 全球及中国淡香水行业市场竞争态势及投资分析报告2022-2027年
- C++程序启动时报“0xc0000022”无法启动的错误
- MYSQL--架构--MGR--理论--01--MGR是什么
- 【论文笔记】MDCSpell: A Multi-task Detector-Corrector Framework for Chinese Spelling Correction
- 前端性能测试lighthouse的使用
- 仿微信录制视频之自定义View
- eclipse更新项目中的代码,必须手动clean才能清除