c – 空“释放”ASSERT宏崩溃程序?

前端之家收集整理的这篇文章主要介绍了c – 空“释放”ASSERT宏崩溃程序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
看看这段代码
#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

猜你在找的C&C++相关文章