Visual C++ 2008 bug?

Visual C++ 2008 bug?

本文关键字:bug 2008 C++ Visual      更新时间:2023-10-16

非常简单的代码(在MS Visual C++2008学习版下):

#include <iostream>
using namespace std;
int main()
{
    for (int a=1; 2*a<=7; a++)
        cout << a << endl;
    return 0;
}

调试模式给我正确的结果:

1
2
3

但是发布模式给了我错误的结果:

1
2

嗯,我理解可能的答案"使用2*a<8";"为什么不a<=3","a<4"。

我不想更改代码,因为它是正确的代码(在调试模式下工作良好,所有变量都初始化良好,等等)。

  • Visual C++2008学习版也有同样的错误吗
  • 这个bug是否存在于较年轻的版本(20102012)中
  • 如何避免这个错误
  • 有SP可以修复吗
  • 也许要更改一些编译选项(而不是默认选项)

更新:

当我写时

cout << a+1 << endl;

cout << 2*a << endl;

它工作/编译正确(3输出行)。


注意:我用VC++2008 Express在不同的计算机上进行了尝试。同样的行为。

我可以在VS2008 SP1上重新编程。和往常一样,这是一个代码优化器错误。你必须查看拆卸过程才能找到原因。当它计算出乘法时,它在2*a <= 7上摸索,它为a <= 2生成代码。这当然是错误的,应该是a <= 3a < 4。看起来它无法处理<=操作员正确划分。有点棘手,它必须知道奇数和偶数之间的区别:)

当你不强迫它找出<=使用2*a < 8可以正常工作。

这个错误已经修复了一段时间,我不知道确切的时间,因为这些旧版本的错误报告已经从公共网站上删除了。处理优化器错误的最佳方法是给它们一个修复它们的机会,保持编译器的更新是非常重要的。您有3个新版本的Express可供选择,这是编译器开发中的两条狗的生命。带有C++11的三个:)