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

NDEBUG宏


概要:
#define NDEBUG	//宏定义。
#undef NDEBUG	//取消宏定义。

描述:

该宏会影响宏assert的行为。

该宏是<assert.h>头文件引用的宏,但不是<assert.h>头文件中定义的宏。如果在包含<assert.h>头文件时,NDEBUG已定义成宏名,宏assert将定义成以下形式:

#define assert(...) ((void)0)

每次包含<assert.h>头文件时,宏assert会根据宏NDEBUG的当前状态重新定义。

实现应将宏assert定义为形参为...的函数式宏,而不是实际函数;如果通过抑制宏定义来访问实际函数,其行为是未定义的。


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

//#define NDEBUG

#include <assert.h>

int main(void)
{
    int a = 5;
    assert(a != 5);

    return 0;
}


输出:
Assertion failed!

Program: C:\Users\dolla\Desktop\C\cTest\test.exe
File: C:\Users\dolla\Desktop\C代码调试\cTest\test.c, Line 10

Expression: a != 5

宏NDEBUG用于控制assert断言的行为。如果定义了宏NDEBUG,所有assert断言会被忽略;如果未定义宏NDEBUG,assert断言会被正常检查。


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


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018