关闭调试,NDEBUG

时间:2012-09-02 16:40:12

标签: c++ assert

C ++ Primer说

  

assert的行为取决于名为NDEBUG的预处理程序变量的状态。我们可以通过提供#define来定义来“关闭”调试   NDEBUG

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

#define NDEBUG TRUE

int main (int argc, char const *argv[])
{
    assert(argc==0);  // checked

    return 0;
}

在此示例中,为什么在定义assert时检查NDEBUG语句? (纠正我,如果我错了,但它与定义的内容无关,对吧?)

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

1 个答案:

答案 0 :(得分:10)

NDEBUG只有在assert包含<cassert>(或<assert.h>之前定义assert时才会影响NDEBUG;请注意,您可以多次包含这些标头,以更改{{1}的行为取决于// this is OK #define NDEBUG )。

您无需将其定义为任何特定值或任何值:

{{1}}