发布版本中是否禁用断言?
Are asserts disabled in release build?
'release' 构建中是否禁用断言?
g++
的 -O0
、-O3
、-g
等可选标志如何影响它的行为?
来自手册页:
If the macro NDEBUG was defined at the moment assert.h
was last
included, the macro assert() generates no code
只有在包含 <cassert>
头文件之前定义宏 NDEBUG
时,<cassert>
头文件中的 assert()
才会被禁用。另见这些 docs
使用 gcc/g++,最简单的方法是在调用编译器时在命令行上定义 NDEBUG
宏,如下所示:
g++ -DNDEBUG ... other args...
优化标志和类似标志等参数不会禁用断言。
'release' 构建中是否禁用断言?
g++
的 -O0
、-O3
、-g
等可选标志如何影响它的行为?
来自手册页:
If the macro NDEBUG was defined at the moment
assert.h
was last included, the macro assert() generates no code
<cassert>
头文件之前定义宏 NDEBUG
时,<cassert>
头文件中的 assert()
才会被禁用。另见这些 docs
使用 gcc/g++,最简单的方法是在调用编译器时在命令行上定义 NDEBUG
宏,如下所示:
g++ -DNDEBUG ... other args...
优化标志和类似标志等参数不会禁用断言。