如何完全禁用断言
我有我的代码充满了调用assert(condition)
。 在debugging版本中,我使用g++ -g
开发我的断言。 令我惊讶的是,我可以在我的发行版本中看到assertion,也就是没有使用-g
选项编译的版本。
我怎么能在编译时完全禁用我的断言? 我应该在任何构build中明确定义NDEBUG
,尽pipe它们是debugging,发布或任何其他的东西?
您必须#define NDEBUG
(或使用带有g ++的标志-DNDEBUG
),只要在包含assert头文件之前定义它,就会禁用assert。
使用#define NDEBUG
7.2诊断
1头部定义了断言macros,并引用另一个macros,
NDEBUG
这不是由
<assert.h>
定义的。 如果NDEBUG被定义为包含在源文件中的macros名称,那么assertmacros被定义为
#define assert(ignore) ((void)0)
每当包含
<assert.h>
时, 断言macros都会根据NDEBUG的当前状态进行重新定义。
你可以完全禁用断言
#define NDEBUG #include <assert.h>
或者你可以在你的makefile / build程序中设置NDEBUG(通过-DNDEBUG),这取决于你是否想要一个高效版本或开发版本。
-g
标志不影响assert
的操作,它只是确保各种debugging符号可用。
设置NDEBUG
是禁用断言的标准(正式的,ISO标准)。
是的,使用预处理器/编译器选项-DNDEBUG
在命令行/编译系统上定义NDEBUG
。
这与-g
插入的debugging信息无关。