考虑下面的代码:
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 表达式 'i < int.MaxValue' 始终为真。
V3022 表达式 'i <= int.MaxValue - 1' 始终为真。
V3022 表达式 'i <= int.MaxValue' 始终为真。
正确报告了最后一个循环中的错误,但前两个警告是误报。