【发布时间】:2016-04-25 14:28:37
【问题描述】:
在“发布”版本中是否禁用了断言?
g++ 的 -O0,-O3,-g 等可选标志如何影响其行为?
【问题讨论】:
-
您是否考虑过查阅文档?
在“发布”版本中是否禁用了断言?
g++ 的 -O0,-O3,-g 等可选标志如何影响其行为?
【问题讨论】:
只有在包含<cassert> 头文件之前定义了宏NDEBUG 时,<cassert> 头文件中的assert() 才会被禁用。另请参阅这些docs
使用 gcc/g++,最简单的方法是在调用编译器时在命令行中定义 NDEBUG 宏,如下所示:
g++ -DNDEBUG ... other args...
优化标志和类似标志等参数不会禁用断言。
【讨论】:
来自手册页:
如果宏 NDEBUG 是在
assert.h是最后一个时刻定义的 包括在内,宏 assert() 不会生成任何代码
【讨论】: