The*_*ist 1 c++ unit-testing assert c++11
该库使用assert()好像它是发布模式下的标识函数(当定义了NDEBUG时).问题是一些重要的代码被包装assert(),并且在发布模式下执行时我的测试被触发,因为这些重要的部分没有被调用.这里可以找到一个例子,其中随机字节生成器不会生成任何东西,并将导致无限循环.
个人轶事:我不喜欢assert(),我个人不会因为这些歧义问题而使用它.我听说很多项目都有严重错误,因为它,最近的EOS,当他们的单元测试没有检测到一些超出范围的数组时,因为NDEBUG是在发布模式下定义的并且没有触发.在这一点上,文档似乎并不清楚.是否assert()充当身份?
这个库(libbtc)似乎被广泛使用,我不明白为什么开发人员会这样做.这是一个可怕的错误,我应该分叉并删除所有这些断言?或者这是一些与C++不兼容的C事物?有人可以在这里解释一下正确的行动方案吗?
我用clang 6.
来自https://en.cppreference.com/w/cpp/error/assert:
如果
NDEBUG在源代码中<cassert>包含的位置定义为宏名称,则assert不执行任何操作.
不要放置任何assert有依赖的副作用的东西.编译发布时不会发生这些问题,并且会改变程序的行为.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |