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/

相关文章:

java - Junit 跳过对函数的调用进入另一个问题

c# - RavenDB查询时间过长

.net - 使 .NET 断言在发布版本中抛出异常

c# - 如何检查方法是否具有属性

java - 在测试中使用 Spring 的 ResourceLoader

java - Java 中的断言不安全吗?

c++ - 生成 C++ 项目中所有类的列表

c++ - glfw3 缺少 glfw3 特定引用

c++ - 使用 std::begin()、std::end() 将 ArrayXd 转换为 STL vector ,

c++ - 无法访问重复类的方法