assert

来自cppreference.com
< c‎ | error
定义于头文件 <assert.h>
#ifdef NDEBUG

#define assert(condition) ((void)0)
#else
#define assert(condition) /*implementation defined*/

#endif

assert依赖于另一个宏,NDEBUG,它不是标注库所定义的。

NDEBUG在源代码中包含<assert.h>的点被定义为宏名,则assert不做任何事。

NDEBUG未定义,则assert检查其参数(必须是标量类型)是否比较等于零。若它等于零,则assert输出实现指定的诊断信息到标准错误输出上,并调用abort()。诊断信息要求包括表达式的文本,还有标准宏__FILE____LINE__ 预定义变量__func__ (C99起)的值。

目录

[编辑] 参数

condition - 标量类型表达式

[编辑] 返回值

(无)

[编辑] 示例

#include <stdio.h>
// 反注释可禁用assert()
// #define NDEBUG
#include <assert.h>
#include <math.h>
 
int main(void)
{
    double x = -1.0;
    assert(x >= 0.0);
    printf("sqrt(x) = %f\n", sqrt(x));   
 
    return 0;
}

输出:

output with NDEBUG not defined:
a.out: main.cpp:10: main: Assertion `x >= 0.0' failed.
 
output with NDEBUG defined:
sqrt(x) = -nan

[编辑] 参考

  • C11 standard (ISO/IEC 9899:2011):
  • 7.2.1.1 The assert macro (p: 186-187)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.2.1.1 The assert macro (p: 169)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.2.1.1 The assert macro

[编辑] 参阅

引发非正常的程序终止(不清理)
(函数) [edit]
assertC++文档