如何才能完全禁用对assert()的调用?
我的代码充满了对 assert(condition)
的调用。 在调试版本中,我使用 g++ -g 来触发我的断言。 出乎意料的是,在我的发布版本(没有使用 -g
选项编译的版本)中也触发了相同的断言。
如何在编译时完全禁用断言?我是否应该在我生成的任何构建中显式定义 NDEBUG,无论它们是调试、发布还是其他?
My code is full of calls to assert(condition)
.
In the debug version I use g++ -g
which triggers my assertions.
Unexpectedly, the same assertions are also triggered in my release version, the one compiled without -g
option.
How can I completely disable my assertions at compile time? Should I explicitly define NDEBUG
in any build I produce regardless of whether they are debug, release or anything else?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您必须
#define NDEBUG
(或使用标志-DNDEBUG
和g++),只要它在包含之前定义,这就会禁用断言断言头文件。You must
#define NDEBUG
(or use the flag-DNDEBUG
with g++) this will disable assert as long as it's defined before the inclusion of the assert header file.使用#define NDEBUG
Use
#define NDEBUG
-g
标志不会影响assert
的操作,它只是确保各种调试符号可用。设置 NDEBUG 是禁用断言的标准方法(如官方 ISO 标准)。
The
-g
flag doesn't affect the operation ofassert
, it just ensures that various debugging symbols are available.Setting
NDEBUG
is the standard (as in official, ISO standard) way of disabling assertions.您可以完全禁用断言
,也可以在 makefile/build 过程中设置 NDEBUG(通过 -DNDEBUG),具体取决于您想要生产版本还是开发版本。
You can either disable assertions completely by
or you can set NDEBUG (via -DNDEBUG) in your makefile/build procedure depending on whether you want a productive or dev version.
是的,使用预处理器/编译器选项
-DNDEBUG
在命令行/构建系统上定义NDEBUG
。这与
-g
插入的调试信息无关。Yes, define
NDEBUG
on the command line/build system with the preprocessor/compiler option-DNDEBUG
.This has nothing to do with the debugging info inserted by
-g
.