2

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

4

2 回答 2

9

您必须NDEBUG在包含定义assert. 尝试

#define NDEBUG
#include <assert.h>

在要禁用断言的源文件的顶部。

于 2012-12-28T15:09:57.670 回答
3

通过定义NDEBUG. 在实践中,你永远不会 -D NDEBUG在命令行中编译。您应该定义自己的调试命令,然后当探查器显示您无法负担特定函数中的检查时,将该函数包装为:

//  Non-critical code...

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

//  Critical function

#undef NDEBUG
#include <assert.h>

//  More non-critical code.

您可以随意添加<assert.h>;每次它assert根据当时是否定义宏来重新定义宏NDEBUG。因此,您可以随心所欲地调整;只是#define NDEBUG#undef NDEBUG每次在您包含标题之前。

于 2012-12-28T15:14:46.220 回答