有些断言代价高昂,有些断言最好在生产代码中关闭。 至少不清楚断言是否应该始终启用。
在我的应用程序中,我希望能够在每个文件或每个类的基础上打开/关闭部分断言。
如何在 C++ 中实现?
最佳答案
为了在模块范围内停用断言,我会使用:
#if defined(assert)
# undef assert
# define assert(x) ((void)0)
#endif
...当然,如果您可以使用自定义宏,这可以简化。
#if defined(_NO_ASSERTS)
# define myAssert(x) ((void)0)
#else
# define myAssert(x) assert(x)
#endif
对于类范围的停用,我将使用静态常量类成员或类范围的枚举与自定义宏相结合:
#define myAssert(x) do { if(_CLASS_ASSERT) { assert(x); } } while(0)
class AssertOff
{
enum { _CLASS_ASSERT = 0 }
}
使用枚举和静态常量 bool 值,所有现代编译器都应该优化掉 if(_CLASS_ASSERT) {}
。
关于c++ - 方便的断言检查策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448601/