assert <assert.h> <cassert>

英文原文:http://www.cplusplus.com/reference/clibrary/cassert/assert/

void assert (int expression);

判定断言


如果这个函数形式的宏的参数表达式等于0(例如,表达式值为false),一个消息将会写到标准错误设备并且调用abort,终止程序运行。

显示的详细消息依赖于编译器的具体实现,但是它应该包括:断言失败时的表达式,源文件名称,断言失败出现时的行号。一个通常的格式是:
Assertion failed: expression, file filename, line line number 

如果包含assert.h文件之前,一个宏NDEBUG已经定义了,那么判断断言的宏就被禁用了。这就允许程序员在调试程序的时候,在源代码中包含很多断言‭调用,之后,在发布产品时简单的包含下面一行,就可以禁用所有宏。
#define NDEBUG    
(放在源代码中,包含assert.h文件之前。)

因此,这个宏通常被设计来捕捉程序错误,而不是用户或者运行错误,而它通常在程序调试阶段结束后被禁用。

参数
expression
     待求值表达式。如果表达式等于0,将会导致断言失败,并且终止程序。 

返回值

实例

/* assert example */
#include <stdio.h>
#include <assert.h>

void print_number(int* myInt) {
  assert (myInt!=NULL);
  printf ("%d\n",*myInt);
}

int main ()
{
  int a=10;
  int * b = NULL;
  int * c = NULL;

  b=&a;

  print_number (b);
  print_number (c);

  return 0;
}

在本实例中,如果print_number被调用的时候,实参为一个空指针,那么assert就会终止程序执行。这种情况发生在第二次调用print_number函数的时候,此时断言失败,提示这里有BUG。

时间: 2024-08-08 16:48:44

assert &lt;assert.h&gt; &lt;cassert&gt;的相关文章

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器  std::ref(变量) #include<iostream> template<class T> void com(T arg)//模板函数,引用无效,引用包装器 { std::cout <<"com ="<< &arg << "\n"; arg++; } void main() { int count = 10; int & rcount = count; com(coun

nodejs: nodejs assert断言的简单理解

       var assert= require('assert');exports.index = function(req, res){assert.equal('1', '2', ['1和2是不相等的']);//assert.ifError(true);res.render('index', { title: 'Express' });};    assert.equal(a,b,c);这句话的理解是,假设,a和b相等,则相安无事.如果,a和b不相等,则输出c语句. 本文链接http:

Spring Assert.notNull

  Exception in thread "main" java.lang.IllegalArgumentException: Source must not be null at org.springframework.util.Assert.notNull(Assert.java:115) at Test.getaVoid(Test.java:11) at Test.main(Test.java:6) at sun.reflect.NativeMethodAccessorImpl

深入JUnit源码之Assert与Hamcrest

初次用文字的方式记录读源码的过程,不知道怎么写,感觉有点贴代码的嫌疑.不过中间还是加入了一些自己的理解和心得,希望以后能够慢慢的改进,感兴趣的童鞋凑合着看吧,感觉JUnit这个框架还是值得看的,里面有许多不错的设计思想在,更何况它是Kent Beck和Erich Gamma这样的大师写的..... 深入JUnit源码之Assert与Hamcrest 到目前,JUnit4所有的核心源码都已经讲解过了,最后剩下的就是为了兼容性而引入的和JUnit3相关的代码以及Assert中的代码.本节将关注于As

org.springframework.util.Assert

使用assert的好处就是比较简介,不用加try catch就可以附加一些预期的提示信息,方便定位问题 import org.springframework.util.Assert; public class Demo { public static void main(String[] args) { String location = null; Assert.notNull(location, "Location must not be null"); System.out.pr

几种服务器端IO模型的简单介绍及实现

#include <Winsock2.h> #include <cstdio> #include <cstdlib> #include <cassert> #include <iostream> #include <string> using namespace std; #pragma comment(lib,"ws2_32.lib") int init_win_socket() { WSADATA wsaDat

PHP开发环境搭建详细教程

     首先你需要安装Apache Server,这里以当前最新版Apache Server2.4为例进行说明,可惜官网并没有提供最新版的msi安装包,连编译后的binary二进制压缩包都没提供,不过我已经编译并上传到我的百度网盘,下载地址如下:       Apache Server2.4最新版安装包   下载下来后直接解压到任意目录,如图:  然后你需要安装Apache Server系统服务,先cd 到apacher server2.4/bin下,然后执行如下命令: Java代码   ht

Filter组件开发中的SDK基类分析

DirectShow SDK提供了一套开发Filter的基类源代码.基于这些基类开发Filter将大大简化开发过程. 1.CBaseObject 大部分SDK类都从CBaseObject类(参见combase.h)中继承而来的. [cpp] view plaincopy class CBaseObject   {      private:          // Disable the copy constructor and assignment by default so you will

C语言接口与实现实例

一个模块有两部分组成:接口和实现.接口指明模块要做什么,它声明了使用该模块的代码可用的标识符.类型和例程,实现指明模块是如何完成其接口声明的目标的,一个给定的模块通常只有一个接口,但是可能会有许多种实现能够提供接口所指定的功能.每个实现可能使用不同的算法和数据结构,但是它们都必须符合接口所给出的使用说明.客户调用程序是使用某个模块的一段代码,客户调用程序导入接口,而实现导出接口.由于多个客户调用程序是共享接口和实现的,因此使用实现的目标代码避免了不必要的代码重复,同时也有助于避免错误,因为接口和