Самый простой код (в MS Visual С++ 2008 Express):
#include <iostream>
using namespace std;
int main()
{
for (int a=1; 2*a<=7; a++)
cout << a << endl;
return 0;
}
Отладка дает мне правильный результат:
1
2
3
Но режим Release дает мне неправильный результат:
1
2
Ну, я понимаю возможные ответы "используйте 2 * a < 8"; "почему бы не a <= 3", "a < 4".
Я не хочу менять код, потому что это правильный код (хорошо работающий в режиме отладки, все переменные инициализируются хорошо и т.д.).
- У вас такая же ошибка с Visual С++ 2008 Express?
- Эта ошибка присутствует в младших версиях (2010, 2012)?
- Как избежать этой ошибки?
- Есть ли SP для его исправления?
- Возможно ли изменить некоторые параметры компиляции (а не параметры по умолчанию)?
Update:
когда я пишу
cout << a+1 << endl;
или
cout << 2*a << endl;
он работает/компилирует правильные строки (3).
Примечание: Я пробовал на разных компьютерах с VС++ 2008 Express. Такое же поведение.