0

考虑下面的代码:

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' 始终为真。

正确报告了最后一个循环中的错误,但前两个警告是误报。

4

1 回答 1

1

我们已经修复了这个误报。该修复程序将在下一个版本中提供。

于 2017-07-14T07:59:21.223 回答