релиз и дебуг выдают разные результаты в VC7.1

bleyman

релиз и дебуг выдают разные результаты в VC7.1


#include <iostream>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
char c[4];
c[0]='a';
c[1]='b';
c[2]='c';
c[3]='d';
std::cout << "before: " << c[0] << c[1] << c[2] << c[3] << std::endl;
for (int n=2 ; n>0; --n)
{
for (int i=0; i<3; i++)
{
c[i] = c[i+1];
}
c[3] = 'x';
}
std::cout << "after: " << c[0] << c[1] << c[2] << c[3] << std::endl;
return 0;
}


Взято с http://www.gamedev.ru/forum/?group=0&topic=12313&page=1#l

mirt1971

Я могу привести код который собран с gcc 3.4.1 с -O0 -g и с -O2 -g, выдающий разный результат. Это нормально

bleyman

Ну ты понимаешь. Одно дело, когда ты делаешь какие-нить странные вещи, вылезаешь за границы массивов етс. А тут код вполне корректный, вот что ужасно!

mirt1971

Не. У меня тоже вполне корректный, и очень простой. Итерация по std::string с добавлением к другой строке символов. Правда показать уже не могу - пришлось делать workaround.

bobby

вот это ЖОПА

myrka68

думаю, я с тобой согласен...

Flack_bfsp

А что они выдают?

buka

Нет! Это не_нормально.

bobby

в Debug все ок: cdxx
в Release (с оптимизациями Maximize Speed или Full Optimization): cxxx
в Release с оптимизацией Minimize Size все ок.

Flack_bfsp

Охренеть! Вот вам и оптимизация...

mirt1971

Вполне нормально. Я еще ни разу не видел безглючного компилятора. История: у меня есть мной написанный трассировщик лучей. Так вот: VC++ 6.0 его не собирает. Валится в ICE. на декларации дружественной функции. Пришлось сделать workaround. VC++ 7 валился в ICE при сборке этого проекта на своей же STL. Пришлось взять STL от SGI. Intel C++ собрал все файлы. Но слинковать так и не сумел. Жаловался на отсутствие каких-то символов. C gcc все было в порядке. Но когда я прикрутил работу с векторами через sse, gcc стал генерить неправильный код. Вот такая вот история.

buka

Гм... А с «char c[5] = "abcd";» не наглеет.

feliks28

Простите глупого: А где там опции компиляции выставляются? А то я в help'е запутался...

bobby

Project -> Properties, там C/C++ -> Optimization
Оставить комментарий
Имя или ник:
Комментарий: