C++ Primer说
断言的行为取决于名为NDEBUG的预处理器变量的状态。我们可以通过提供一个
#define来定义NDEBUG来“关闭”调试。
我的期望是,当提供定义时,断言不会被执行。
#define NDEBUG TRUE
int main (int argc, char const *argv[])
{
assert(argc==0); // checked
return 0;
}在本例中,为什么在定义assert语句时检查NDEBUG语句?(如果我错了,请纠正我,但这与它的定义无关,对吗?)
当使用-DNDEBUG标志从命令行执行时,所有操作都按预期工作(不执行assert)
发布于 2012-09-02 16:41:33
只有在包含NDEBUG之前定义assert (或<assert.h>;请注意,您可以多次包含这些标头,根据NDEBUG更改assert的行为),才会影响assert。
您不需要将其定义为任何特定值,也不需要定义任何值:
// this is OK
#define NDEBUGhttps://stackoverflow.com/questions/12237818
复制相似问题