assert宏
概要:
#include <assert.h> void assert(scalar expression);
描述:
该宏在程序调试时测试断言。该宏会扩展为void类型表达式。执行该宏时,如果标量表达式(scalar expression)的值等于0(即表达式为假。),一条诊断信息将写入标准错误流(stderr);然后调用abort函数终止程序。
诊断信息可能具有以下形式:
Assertion failed: expression, function abc, file xyz, line nnn.
诊断信息的具体形式由实现定义,通常包括以下信息:实参的文本、源文件名、宏所在源文件行号、封闭函数名;其中源文件名、宏所在源文件行号、封闭函数名分别是预处理宏__FILE__、__LINE__、预定义标识符__func__的值。
实现应将assert定义成宏,而不是函数。
宏assert可以在程序调试阶段捕捉程序中的错误,但不能处理用户错误和程序运行时的错误;程序调试结束后,一般会禁用该宏。具体做法就是在指令#including <assert.h>前,定义宏NDEBUG,如下所示:
#define NDEBUG
#including <assert.h>
参数:
scalar expression
该参数为标量表达式;如果表达式的值为0,将导致断言失败,程序终止。
返回值:
无。
范例:
|
|
输出:
Assertion failed: i < 0, file E:\cTest\test.c, line 9
这个例子中,标量表达式i<0为假,导致断言失败而终止程序。
相关内容:
NDEBUG | 影响宏assert行为的宏。 |
static_assert | 程序编译时测试断言的宏。 |