Visual C++ 2008 bug?
Visual C++ 2008 bug?
非常简单的代码(在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 <= 3
或a < 4
。看起来它无法处理<=操作员正确划分。有点棘手,它必须知道奇数和偶数之间的区别:)
当你不强迫它找出<=使用2*a < 8
可以正常工作。
这个错误已经修复了一段时间,我不知道确切的时间,因为这些旧版本的错误报告已经从公共网站上删除了。处理优化器错误的最佳方法是给它们一个修复它们的机会,保持编译器的更新是非常重要的。您有3个新版本的Express可供选择,这是编译器开发中的两条狗的生命。带有C++11的三个:)
相关文章:
- Clang bug?使用指针作为模板参数
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 类无法访问自己的私有静态 constexpr 方法 - Clang bug?
- 枚举和二进制或运算符(MISRA C++ 2008,4-5-2)
- 如何使用Visual Studio 2008将字符串映射到函数?
- 使用 2x1 图块平铺 2xM 数组以最大化差异 - INOI 2008,P2
- C++:编译对无关派生类、bug或特性的函数调用
- MSVC 2008,调试过程,无法调试
- Microsoft VC++, vsnprintf, and Pipes (IO) Bug
- 生成可视C++ 2008 项目时出现链接器错误
- Visual Studio 2008 WriteFile
- VS 2008 和 VS 2017 中静态参数的不同行为
- Divide et impera sum of the elements of an array bug
- 我正在用 c++ 制作一个小时钟,但遇到了"bug"或某种问题
- Microsoft Visual Studio 2008,版本9.0.30739.1 SP,DLL构建错误
- 如何在何处获取 MSVS 2008(32 位)编译器工具链的编译器,而无需安装 MSVS2008
- Templated Variables Bug With Lambdas in Visual Studio?
- GCC Bug,使用尖括号通过宏包含标头时"linux"路径中的字符串"<>"替换为 "1"
- Visual C++ 2008 bug?
- Boost lexical_cast<std::string>(int) MSVC 2008 bug