当前位置: C语言 -- 标准库 -- <assert.h> -- assert

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,将导致断言失败,程序终止。


返回值:

无。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
/*宏assert范例*/

#include <assert.h>
#include <stdio.h>

int main(void)
{
    int i = 5;
    assert(i < 0);
    printf("i = %d", i);

    return 0;
}

输出:

Assertion failed: i < 0, file E:\cTest\test.c, line 9

这个例子中,标量表达式i<0为假,导致断言失败而终止程序。


相关内容:
NDEBUG 影响宏assert行为的宏。
static_assert 程序编译时测试断言的宏。