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
未执行)
答案 0 :(得分:10)
NDEBUG
只有在assert
包含<cassert>
(或<assert.h>
之前定义assert
时才会影响NDEBUG
;请注意,您可以多次包含这些标头,以更改{{1}的行为取决于// this is OK
#define NDEBUG
)。
您无需将其定义为任何特定值或任何值:
{{1}}