c++中的断言

来源:互联网 发布:淘宝客url解密 编辑:程序博客网 时间:2024/06/09 17:41

assert(),即断言;
一般可以用于调试阶段的出错处理.
需要注意的是在release版本中,这个不起作用.
头文件是 assert.h(C), cassert(c++) .

示例:

 //VC2005下编译通过.

C++代码
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <assert.h>  
  4.   
  5. void main()  
  6. {  
  7.    char *p=NULL;  
  8.    char ch[50] = "this is a assert test in http://imzc.net ./n";   
  9.    assert(p!=NULL);  
  10.    printf("%s",ch);  
  11. }  

DEBUG下的提示:

 

大小: 27.13 K尺寸: 400 x 191浏览: 13 次点击打开新窗口浏览全图

Release下的提示:

大小: 5.59 K尺寸: 400 x 106浏览: 13 次点击打开新窗口浏览全图

 


下面是C++标准上面的定义,

来自http://www.cplusplus.com/reference/clibrary/cassert/assert/.

void assert (int expression);
<cassert>

Evaluate assertion

If the argument expression of this macro with functional form compares equal to zero (i.e., the expression is false), a message is written to the standard error device and abort is called, terminating the program execution.

[如果说表达式expression 的值为0,将错误信息写到标准错误设备,然后abort()终止函数调用.]

The specifics of the message shown depend on the specific implementation in the compiler, but it shall include: the expression whose assertion failed, the name of the source file, and the line number where it happened. A usual expression format is:
[错误信息格式为:]
Assertion failed: expression, file filename, line line number

This macro is disabled if at the moment of including assert.h a macro with the name NDEBUG has already been defined. This allows for a coder to include many assert calls in a source code while debugging the program and then disable all of them for the production version by simply including a line like:

#define NDEBUG 

at the beginning of its code, before the inclusion of assert.h.

Parameters

expression
Expression to be evaluated. If this expression evaluates to 0, this causes an assertion failure that terminates the program.

Return Value

none

原创粉丝点击