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