摘自http://www.cplusplus.com

assert : macro

#include <assert.h>
void assert (int expression);

  

  如果表达式值为0(即假),这时会向std::cerr设备发送一条信息,同时abort被调用,程序终止运行。

  向std::cerr发送的信息内容取决与具体的库实现,但至少应包括以下内容:引起assert判断为错误的表达式,源文件的名称,源代码中具体的位置(行数);通常表达规范如下:

    Assertion failed : expression file filename line line number

  如果名为NDEBUG的宏在此之前就已经定义好了,即使包含了<assert.h>文件,assert宏仍会失效。这会给程序员一些便利:在编写源代码并调试程序时可以使用任意多的  assert来查找问题,但在程序发布时可以在头部添加NODEBUG宏来使assert失效,简便了许多:

    将 #define NODEBUG 放在代码的开头并且在包含<assert.h>之前

  因此,assert宏是用来捕捉程序错误的,而并非用户或者运行时的错误(不知道怎么翻译,用户错误应该是程序逻辑错误,但是程序本身时正确可编译运行的。运行时的错误不太理解,此处应该是假设运行程序时使用了NODEBUG,强调调试采用assert,实际上程序运行还是可以用assert宏的),因为在退出调试模式后assert通常就失效了也就是说,assert只在debug时才生效。

参数:表达式

  如果表达式值为0,则产生 assert 失败信息,从而终止程序运行

返回值:

  无

总结

  1)在函数开始处检验传入参数的合法性

  2)assert()的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销,所以在程序完成后使用NODEBUG宏禁止assert

  3)不能使用改变环境的语句,因为assert只在DEBUG中生效,如果这么做,会使用程序在真正运行时遇到问题

assert(i++ < 100);//这时如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行

  4)assert不能代替条件过滤。assert是用来避免显而易见的错误的,而不是处理异常的。错误和异常是不一样的,错误是不应该出现的,异常是不可避免的。c语言异常可以通过条件判断来处理,其它语言有各自的异常处理机制。一个非常简单的使用assert的规律就是,在方法或者函数的最开始使用,如果在方法的中间使用则需要慎重考虑是否是应该的。方法的最开始还没开始一个功能过程,在一个功能过程执行中出现的问题几乎都是异常。

  5) 程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。断言assert 是仅在Debug 版本起作用的宏,它用于检查“不应该”发生的情况。ASSERT只有在Debug版本中才有效,如果程序编译为Release版本则被忽略

  

【C/C++】assert的更多相关文章

  1. 【C/C++】assert()函数用法总结

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

  2. 【pytest系列】- assert断言的使用

    unittest断言方式是用过框架自己实现的,即self.assertEqual()等,当我们使用pytest框架后,这种断言方式是不可用的,因为测试类不会再继承unittest.TestCase类, ...

  3. 【php】assert函数的用法

    [php]assert函数的用法 http://www.douban.com/note/217557007/ 2012-06-01 10:32:37   assert这个函数在php语言中是用来判断一 ...

  4. 跟着老男孩教育学Python开发【第一篇】:初识Python

    Python简介 Python前世今生 Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...

  5. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

  6. Python开发【第一篇】:初识Python

    初识python 一.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...

  7. Python【第一章】:简介和入门

    ython简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之 ...

  8. Python之路【第一篇】:Python简介和入门

    python简介: 一.什么是python Python(英国发音:/ pa θ n/ 美国发音:/ pa θɑ n/),是一种面向对象.直译式的计算机程序语言. 每一门语言都有自己的哲学: pyth ...

  9. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

随机推荐

  1. git本地仓库管理远程仓库

    git remote add origin https://xxxxxgit push -u origin master

  2. SQL的优化1

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  3. 很详细、很移动的Linux makefile 教程

    近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

  4. Ubuntu中安装jdk环境

    1.Installing default JRE/JDK sudo apt-get update sudo apt-get install default-jre sudo apt-get insta ...

  5. 【leetcode刷题笔记】Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  6. windows 2008 server 英文版 支持中文显示

    1:打开Start menu(开始菜单)并单击Control Panel(控制面板)打开它 2:单击Clock, Language, and Region(时钟.语言和区域)下面的Change dis ...

  7. java中的向上转型

    Person 可以表示为一个抽象的东西 就是人.比如说人可以唱歌, 就好比Person类中有一个sing方法.那么这个抽象的类(Person 人)可以具体到两类或者更多类 比如 男人,女人 .Man ...

  8. Python- Anacoda环境使用Selenium+ChromeDriver报错

    我的系统是win10,python是用Anacoda安装的,通过pip安装了selenium 后使用Chromedriver发现报错,pip安装selenium如下: pip install sele ...

  9. Openldap- 大机群身份验证服务

    无论在哪个行业,数据安全永远都是摆在首要地位.尤其是在大数据行业上,谁掌握了数据,谁就有可能成为下个亿万富豪的环境中,数据安全更为重要.大数据的安全可以从哪些地方入手,首先可以在身份验证上面入手.在大 ...

  10. 兼容IE8及其他浏览器的回车事件

    //阻止默认浏览器行为 function stopDefault(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.preventDefault) { // ...