如何在不更改命令行的情况下禁用断言?

时间:2012-12-28 15:07:05

标签: c++ debugging assert

我有带有断言的C ++代码。当我使用g++ -D NDEBUG选项编译代码时,不会执行assert命令。但是当我在代码#define NDEBUG上包含NDEBUG并使用no -D NDEBUG选项进行编译时,会执行assert命令。如何在不更改命令行的情况下禁用断言?

2 个答案:

答案 0 :(得分:9)

在包含定义NDEBUG的标头之前,您必须定义assert。尝试

#define NDEBUG
#include <assert.h>

在源文件的顶部,您要在。

中禁用断言

答案 1 :(得分:3)

定义NDEBUG。在实践中,你永远不会编译 命令行中-D NDEBUG;你应该定义自己的 debug命令,然后当探查器显示你不能 在特定函数中提供检查,将函数包装进去 类似的东西:

//  Non-critical code...

#ifdef MYDEBUGOFF
#define NDEBUG
#endif
#include <assert.h>

//  Critical function

#undef NDEBUG
#include <assert.h>

//  More non-critical code.

您可以随意添加<assert.h>;每一次 根据{{​​1}}是否重新定义assert宏 在那一刻定义。所以你可以调整你的心脏 内容;每次只需NDEBUG#define NDEBUG 在包含标题之前。