RangeAnalysis 和 V3022
RangeAnalysis and V3022
考虑以下代码:
for (var i = int.MaxValue - 2; i < int.MaxValue; i++)
{
Console.WriteLine(i);
}
Console.WriteLine();
for (var i = int.MaxValue - 2; i <= int.MaxValue - 1; i++)
{
Console.WriteLine(i);
}
Console.WriteLine();
for (var i = int.MaxValue - 2; i <= int.MaxValue; i++)
{
Console.WriteLine(i);
}
前两个循环预计只会打印出第三大和第二大整数。
最后一个循环有一个错误,其中 i
会溢出到 int.MinValue
并导致无限循环。
运行 它给出了预期的输出。
2147483645
2147483646
2147483645
2147483646
2147483645
2147483646
...
PVS Studio 提出三个警告:
V3022 Expression 'i < int.MaxValue' is always true.
V3022 Expression 'i <= int.MaxValue - 1' is always true.
V3022 Expression 'i <= int.MaxValue' is always true.
正确报告了最后一个循环中的错误,但前两个警告是误报。
我们已经修复了这个误报。该修复程序将在下一个版本中提供。
考虑以下代码:
for (var i = int.MaxValue - 2; i < int.MaxValue; i++)
{
Console.WriteLine(i);
}
Console.WriteLine();
for (var i = int.MaxValue - 2; i <= int.MaxValue - 1; i++)
{
Console.WriteLine(i);
}
Console.WriteLine();
for (var i = int.MaxValue - 2; i <= int.MaxValue; i++)
{
Console.WriteLine(i);
}
前两个循环预计只会打印出第三大和第二大整数。
最后一个循环有一个错误,其中 i
会溢出到 int.MinValue
并导致无限循环。
运行 它给出了预期的输出。
2147483645
2147483646
2147483645
2147483646
2147483645
2147483646
...
PVS Studio 提出三个警告:
V3022 Expression 'i < int.MaxValue' is always true.
V3022 Expression 'i <= int.MaxValue - 1' is always true.
V3022 Expression 'i <= int.MaxValue' is always true.
正确报告了最后一个循环中的错误,但前两个警告是误报。
我们已经修复了这个误报。该修复程序将在下一个版本中提供。