关闭调试,NDEBUG

Turning off debugging, NDEBUG

本文关键字:NDEBUG 调试      更新时间:2023-10-16

C++Primer说

assert的行为取决于名为NDEBUG的预处理器变量的状态。我们可以通过提供#define来定义NDEBUG

我希望在提供define时,断言不会被执行。

#define NDEBUG TRUE
int main (int argc, char const *argv[])
{
    assert(argc==0);  // checked
    return 0;
}

在本例中,当定义了NDEBUG时,为什么要检查assert语句?(如果我错了,请纠正我,但这与它的定义无关,对吧?)

从命令行执行时,使用-DNDEBUG标志,所有工作均按预期进行(未执行assert

NDEBUG仅在包含<cassert>(或<assert.h>;请注意,您可以多次包含这些标头,从而根据NDEBUG更改assert的行为)之前定义assert

你不需要把它定义为任何特定的值,或者任何值:

// this is OK
#define NDEBUG