在'release'build中是否禁用了断言?
-O0
的{{1}},-O3
,-g
等可选标记如何影响其行为?
答案 0 :(得分:7)
assert()
头文件之前定义宏<cassert>
时,才会禁用NDEBUG
标头中的 <cassert>
。另请参阅这些docs
使用gcc / g ++,最简单的方法是在调用编译器时在命令行上定义NDEBUG
宏:
g++ -DNDEBUG ... other args...
优化标志和类似标志之类的参数不会禁用断言。
答案 1 :(得分:0)
从手册页:
如果在
assert.h
最后一次定义宏NDEBUG 包含,宏assert()不生成代码