【问题标题】:Are asserts disabled in release build? [duplicate]发布版本中是否禁用了断言? [复制]
【发布时间】:2016-04-25 14:28:37
【问题描述】:

在“发布”版本中是否禁用了断言?

g++-O0,-O3,-g 等可选标志如何影响其行为?

【问题讨论】:

标签: c++ linux g++ assert


【解决方案1】:

只有在包含<cassert> 头文件之前定义了宏NDEBUG 时,<cassert> 头文件中的assert() 才会被禁用。另请参阅这些docs

使用 gcc/g++,最简单的方法是在调用编译器时在命令行中定义 NDEBUG 宏,如下所示:

g++ -DNDEBUG ... other args...

优化标志和类似标志等参数不会禁用断言。

【讨论】:

    【解决方案2】:

    来自手册页:

    如果宏 NDEBUG 是在 assert.h 是最后一个时刻定义的 包括在内,宏 assert() 不会生成任何代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 2015-12-13
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 2013-11-01
      相关资源
      最近更新 更多