我的代码充满了对assert(condition)
的调用。在调试版本中,我使用g++ -g
来触发我的断言。出乎意料的是,在我的发布版本中也触发了相同的断言,即没有-g
选项编译的版本。
如何在编译时完全禁用断言?我是否应该在我生成的任何构建中显式地定义NDEBUG
,而不管它们是调试、发布还是其他任何东西?
发布于 2011-03-18 23:40:51
-g
标志不会影响assert
的操作,它只是确保各种调试符号可用。
设置NDEBUG
是禁用断言的标准方式(就像在官方的ISO标准中一样)。
发布于 2011-03-18 23:39:09
您可以通过以下方式完全禁用断言
#define NDEBUG
#include <assert.h>
或者,您可以在makefile/build过程中设置NDEBUG (通过-DNDEBUG),这取决于您想要的是生产力版本还是开发版本。
发布于 2011-03-18 23:39:20
可以,使用预处理器/编译器选项-DNDEBUG
在命令行/构建系统上定义NDEBUG
。
这与-g
插入的调试信息无关。
https://stackoverflow.com/questions/5354314
复制相似问题