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

NDEBUG宏


概要:
#define NDEBUG    //宏定义。
#undef NDEBUG     //删除宏定义。

描述:

该宏会影响宏assert的行为。

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

#define assert(ignore) ((void)0)

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


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
/*宏NDEBUG范例*/

#ifndef NDEBUG
    #define NDEBUG
    #include <assert.h>
#endif

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

#ifdef NDEBUG
    #undef NDEBUG
    #include <assert.h>
#endif

    assert(a != 5);

    return 0;
}


输出:

Assertion failed: i != 5, file E:\cTest\ndebug.c, line 18

程序执行时,第11行中的断言将被忽略;第18行中的断言将被测试。


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