assert

assert

在头文件中定义
#ifdef NDEBUG #define assert(condition)((void)0)#else #define assert(condition)/ * implementation defined * / #endif

宏的定义assert取决于另一个宏NDEBUG,它不是由标准库定义的。

如果NDEBUG在源代码中<assert.h>包含的位置被定义为宏名称,则不assert执行任何操作。

如果NDEBUG未定义,则assert检查其参数(必须具有标量类型)是否等于零。如果确实如此,则assert在标准错误输出和调用上输出实现特定的诊断信息abort()。诊断信息需要包括的文本expression,以及标准的宏的值__FILE____LINE__和预定义的变量__func__。(自C99以来)。

参数

条件-标量类型的表达

返回值

(none).

#include <stdio.h> // uncomment to disable 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标准(ISO/IEC 9899:2011):

另请参阅

abort导致程序异常终止(不清除)(功能)

| C++ documentation for assert |