我有带有断言的C ++代码。当我使用g++ -D NDEBUG
选项编译代码时,不会执行assert命令。但是当我在代码#define NDEBUG
上包含NDEBUG并使用no -D NDEBUG
选项进行编译时,会执行assert命令。如何在不更改命令行的情况下禁用断言?
答案 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
在包含标题之前。