看看这段代码:
#include <cassert> #ifdef DEBUG #define ASSERT(expr) assert(expr) #else #define ASSERT(expr) #endif /* DEBUG */
程序将仅在我定义了DEBUG时运行,否则它将挂起并终止而没有结果.我在Eclipse Indigo CDT中使用MinGW.建议表示赞赏!
解决方法
你几乎肯定会滥用断言.断言表达式绝不能有副作用.
当你说,assert(initialize_critical_space_technology());然后你在发布版本中省略了整行时,你可以想象自己会发生什么.
使用断言的唯一安全且理智的方法是使用值:
const bool space_init = initialize_critical_space_technology(); assert(space_init);
有些人为总是执行代码的东西引入了一个VERIFY宏:
#define VERIFY(x) (x) // release #define VERIFY(x) (assert(x)) // debug