c++ - 方便的断言检查策略

标签 c++ testing assert assertions

有些断言代价高昂,有些断言最好在生产代码中关闭。 至少不清楚断言是否应该始终启用。

在我的应用程序中,我希望能够在每个文件或每个类的基础上打开/关闭部分断言。

如何在 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/

相关文章:

c++ - 当输出达到某个值时如何在 C++ 中打破计数器循环

selenium - 为并行执行设置 selenium webdriver

c++ - 断言为好友类

c++ - C/C++ 中 assert(false) 的更好替代方案

Python:断言不打印错误消息

c++ - 如何在Windows上获取可用的RAM?

c++ - 具有可变高阶函数的重载分辨率

android - 导入 androidx.fragment.app.testing.FragmentScenario 的未解决引用

unit-testing - 那里有哪些 'styles' 测试框架?

C++在类里面添加标题让我很生气