when we want to disable assertion we have to define NDEBUG but why should we define it before the inclusion of assert header file??
the second question: what is the point in disabling assertion and using the macro assert??
问问题
74 次
1 回答
2
当我们想禁用断言时,我们必须定义 NDEBUG 但是为什么我们要在包含断言头文件之前定义它?
因为assert
定义类似于以下代码片段:
#ifdef NDEBUG
#define assert(condition) ((void)0)
#else
#define assert(condition) /*implementation defined*/
#endif
NDEBUG
现在,只有事先定义好条件才会为真。
第二个问题:禁用断言和使用宏断言有什么意义?
断言需要运行时间。您仍然希望它们保留在已发布的产品中,但您不想检查它们。例如:
auto a = b;
assert(a == b);
如果平等测试需要很长时间,那么在生产环境中您应该避免这种情况。但是,在调试/测试时,很高兴知道第一行实际上生成了一个与原始对象相等的副本。
总而言之,您可以assert()
在开发/调试时断言某些内容,并且当此断言在测试期间成立时,您可以安全地禁用它们以进行发布。
于 2013-09-11T22:39:03.870 回答