静态分析工具,用于检测由于类型提升而导致的无休止循环
Static analysis tool to detect endless loop due to type promotion?
我刚刚在复杂数据结构的反序列化例程中发现了一个有趣的错误:
int32_t nrElements;
buffer->deserialize( &nrElements );
for( int16_t i=0; i<nrElements; ++i ) {
// deserialize element
}
如果nrElements
小于215,这会很好地工作,但在其他情况下会导致无限循环。有没有静态分析工具可以检测这种错误?GCC没有对此发出警告。
我认为GCC不支持对此发出警告。我想你可以使用模板函数和静态断言来实现这一点:
template<typename T1, typename T2>
bool safeLess(T1 left, T2 right)
{
static_assert(std::is_same<T1, T2>::value);
return left < right;
}
然而,我真的怀疑它的有用性,因为它扰乱了代码(可能会妨碍一些编译器优化)。
相关文章:
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 关于 SIGTSTP 错误和无休止的输入
- 宽藤会话更新无休止循环
- 为什么析构函数无休止地调用自己(导致堆栈溢出)?
- 在图像上覆盖文本的程序会产生无休止的字符串错误
- OpenSSL客户端陷入无休止的读取
- 无休止的 do while 循环C++代码
- 循环无休止地做
- 卡死胡同-无休止的循环,没有解决方案
- C++:如果输入不是整数,为什么这段代码会运行一个无休止的循环
- C++无休止的循环瓶颈
- 这无休止地循环是否有明显的原因
- C++ & SDL:SDL 事件无休止地重复
- 静态分析工具,用于检测由于类型提升而导致的无休止循环
- c++:在修改c字符串数组时帮助纠正无休止循环
- std::advanced()导致无休止的循环
- 为什么我的函数无休止地循环
- 在无休止地循环cout时执行,忽略cin
- boost::asio系统的无休止循环:第一次连接后出现9个错误
- 我如何阻止它无休止地循环