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&sol;C&plus;&plus;】assert&lpar;&rpar;函数用法总结

assert()函数用法总结 assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include ...

&lpar;转&rpar;assert&lpar;&rpar;函数用法总结

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( in ...

转:assert&lpar;&rpar;函数用法总结

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( in ...

C语言assert&lpar;&rpar;函数用法总结

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( i ...

assert函数用法总结【转】

本文转载自:http://blog.csdn.net/u014082714/article/details/45190505 assert宏的原型定义在中,其作用是如果 ...

C&sol;C&plus;&plus; assert&lpar;&rpar;函数用法总结

1. 简介 assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行. 原型定义: #include void ass ...

assert&lpar;&rpar;函数用法

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&plus;&plus; 应用处理异常崩溃(转载)

有时,在我们的程序运行的时候,会遇到一些崩溃问题,尤其是概率出现的时候,如果能捕获其异常,那么对于我们快速定位bug是很有帮助的 这里借用网上搜寻回来的函数,记录一下: 头文件及库: #include ...

开始跟踪Redis啦,开帖

随着NoSql的流行,对这方面的产品开始关注起来,之前一直只是看看.从昨天开始决定把Redis的实现机制啃下来,毕竟代码量也就2W行. 每天花时间看看,记录下成果. here we go.

Android&colon; 启动另外的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&period;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学习一&lpar;swfobject知识&rpar;

首先必须了解下swfobject的知识 在网页里面插入swf再平常不过了, 一般会想到如下代码:

c语言中assert函数,assert()函数用法总结相关推荐

  1. C 语言中 char[] 的操作函数

    C语言中char[]的操作函数 1.赋值操作 在C语言中,char型数组是不可以直接赋值的.例如在如下的代码中,会得到错误: char c1[20] = "women"; char ...

  2. C++语言中std::array的神奇用法总结,你需要知道!

    摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...

  3. c语言常量的正确表示const,C语言中的const和free用法详解

    注意:C语言中的const和C++中的const是有区别的,而且在使用VS编译测试的时候.如果是C的话,请一定要建立一个后缀为C的文件,不要是CPP的文件.因为,两个编译器会有差别的. 一.C语言中的 ...

  4. c语言中if和goto的用法,C语言中if和goto的用法.doc

    C语言中if和goto的用法 C语言中,if是一个条件语句,用法??if(条件表达式) 语句如果满足括号里面表达式,表示逻辑为真于是执行后面的语句,否则不执行(表达式为真则此表达式的值不为0,为假则为 ...

  5. go语言中error的分类与用法

    go语言中error的分类与用法 原文引用:极客时间中的课程<Go error处理最佳实践> 前言:本文要讨论的就是go中error的基本原理/类型,以及最重要的几个问题: go代码开发中 ...

  6. 在c语言中while与do-while,C语言中while /do while语句用法

    C语言中while /do while语句用法 C语言while语句的用法 while语句的一般形式为:while(表达式)语句 其中表达式是循环条件,语句为循环体. while语句的语义是:计算表达 ...

  7. c语言while break用法举例,c语言中continue和break的用法

    目前,随着计算机在人们生活和工作中的普及,其教学研究地位也在逐渐提升.C语言是一种计算机程序设计语言,其具有高级语言和汇编语言的特点.下面小编就跟你们详细介绍下c语言中continue和break的用 ...

  8. c语言do while语句用法6,C语言中while /do while语句用法

    摘要 腾兴网为您分享:C语言中while /do while语句用法,仙乐,同程旅游,天猫超市,闪送等软件知识,以及上网本系统,酷我音乐mac,美版微信,地基承载力计算,云解压,猫咪咖啡馆游戏,智课雅 ...

  9. c语言中fmod()函数和log10()函数用法

    C语言中fmod函数的功能是x/y的求余运算,适用于double ,float,long double,如果y=0的话,那么返回 值得一提的是%,'%'同样是取余,但是% 适用于整数取余,%是整数的取 ...

  10. C语言中fputc和fgetc函数用法

    C语言中文件的读写函数之 fputc.fgetc 首先,我们要知道fputs和fgetc这两个函数是包含在标准库函数中的函数,换句话说,就是封装在标准函数中的两个函数.其中这两个函数都是每次只能输入或 ...

最新文章

  1. 阿里CTO张建锋:云拐点已至,All in cloud;贾扬清完整title公开
  2. DPM(Deformable Parts Model)--原理(一)
  3. (转)博弈问题与SG函数
  4. docker mysql编辑器_docker官方mysql镜像自定义配置详解
  5. 判断两线段是否相交——快速排斥与跨立实验
  6. Tmux : GNU Screen 的替代品
  7. C#算法设计查找篇之03-插值查找
  8. 用一个比特币买一辆Model3?马斯克血洗空头后,苹果也要跟?
  9. centos7.2编译php,CentOS7.2编译安装PHP7.2.3之史上最详细步骤。
  10. 年底双薪一般是什么时候发_评职称发表文章一般发什么刊物
  11. wifipumpkin3 WiFi钓鱼工具
  12. 日常小tip_Bat命令运行Java程序
  13. 国家统计局可以获取到全国5级行政区域数据
  14. 安装移动视频监控 即时监控地铁车厢
  15. MySQL日志之Undo日志
  16. 计算机教师的幸福,有关信息技术教师教育感言
  17. java中倒三角形和正三角形_正三角形,倒三角形,以及正倒三角
  18. 彻底解决win10时间同步失败
  19. 2023浙江工商大学计算机考研信息汇总
  20. java万能引用_Java的四种引用方式

热门文章

  1. FPS教程附带源码 更换基址 编译可用 包括csgo cf
  2. 【elk】网络设备syslog日志收集
  3. Python+Django毕业设计校园食堂订餐系统(程序+LW+部署)
  4. 全球及中国淡香水行业市场竞争态势及投资分析报告2022-2027年
  5. C++程序启动时报“0xc0000022”无法启动的错误
  6. MYSQL--架构--MGR--理论--01--MGR是什么
  7. 【论文笔记】MDCSpell: A Multi-task Detector-Corrector Framework for Chinese Spelling Correction
  8. 前端性能测试lighthouse的使用
  9. 仿微信录制视频之自定义View
  10. eclipse更新项目中的代码,必须手动clean才能清除