C++ Primer 说
assert 的行为取决于名为 NDEBUG 的预处理器变量的状态。
#define
我们可以通过提供一个定义 来“关闭”调试NDEBUG
我的期望是在提供定义时,不会执行断言。
#define NDEBUG TRUE
int main (int argc, char const *argv[])
{
assert(argc==0); // checked
return 0;
}
在这个例子中,为什么要assert
检查语句,何时NDEBUG
定义?(如果我错了,请纠正我,但这与它的定义无关,对吧?)
从命令行执行时,使用-DNDEBUG
标志,所有工作都按预期工作(assert
不执行)