概述
循环条件中不同宽度的类型之间的比较可能导致循环无法终止。
建议
在循环条件中使用适当的类型。
示例:
在此示例中,如果参数 a 的值大于 SHRT_MAX,那么比较的结果可能会导致无限循环。
void InfiniteLoop(int a)
{
for (short i = 0; i < a; i++) // BUG: infinite loop
{
// ...
}
}
若要修复错误,我们将更改变量 i 的类型以符合 a 的宽度:
void NotInfiniteLoop(int a)
{
for (int i = 0; i < a; i++)
{
// ...
}
}
其他详细信息
可以在 Microsoft GitHub CodeQL 存储库中找到此查询。 有关 Windows 驱动程序开发人员如何下载和运行 CodeQL 的详细信息 ,请参阅 CodeQL 和静态工具徽标测试 页。