摘自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. 在VS中自动生成NuGet包以及搭建自己的或单位内部的NuGet服务器

    关于NuGet的介绍已经很多,可以参考下面的: NuGet学习笔记(1)--初识NuGet及快速安装使用 http://kb.cnblogs.com/page/143190/ NuGet学习笔记(2) ...

  2. ASIHTTP

    本文转载至 http://www.th7.cn/Program/IOS/201303/128223.shtml     向服务器端上传数据 ASIFormDataRequest ,模拟 Form表单提 ...

  3. 股神小L 2016Vijos省选集训 day1

    股神小L (stock.c/pas/cpp)============================ 小L厌倦了算法竞赛,希望到股市里一展身手.他凭借自己还行的计算机功底和可以的智商,成功建立一个模型 ...

  4. F - 数论

    F - 数论 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description ...

  5. Webpack探索【4】--- entry和output详解

    本文主要讲entry和output相关内容.

  6. Django使用富文本编辑器

    1.下载kindeditor 网址:http://kindeditor.net/demo.php2.解压到项目中 地址:\static\js\kindeditor-4.1.103.删除没用的文件 例如 ...

  7. Jquery定义对象( 闭包)

    转自:http://www.cnblogs.com/springsnow/archive/2010/06/03/1750832.html 例一:添加对象的静态属性 声明一个对象$.problemWo, ...

  8. jQuery中通过JSONP来跨域获取数据的三种方式

    第一种方法是在ajax函数中设置dataType为'jsonp' $.ajax({ dataType: 'jsonp', url: 'http://www.a.com/user?id=123', su ...

  9. iOS JSON 和 Mode l转换

    MJExtension  是我们项目开发常用的一个第三方框架  很好用. https://github.com/CoderMJLee/MJExtension 映射 json  value key  直 ...

  10. jenkins实现自动部署

    主机A搭建gitlab.gitlab下载:https://www.gitlab.cc/downloads/    (gitlab中文网) 主机B搭建jenkinsjenkins下载:https://j ...