Re[2]: vs2003 7.1.3038
От: CreatorCray  
Дата: 30.11.06 10:59
Оценка:
Здравствуйте, Peregrin, Вы писали:

P>У меня при компиляции с /O2 ничего не выводится. При запуске под отладчиком видно, что компилятор скомпилировал этот код вот в такое:

P>
P>--- d:\cpp\vc7bugs\test1.cpp ---------------------------------------------------
P>#include <stdio.h>

P>void main()
P>{
P>    int sh = 188;// это неважно, главное чтоб было больше чем 32
P>    int a = 4; // это тоже не важно, главно чтоб а не 0
P>    if( a << sh )
P>    {
P>        printf( "asdf\n" );
P>    }
P>}
P>00401010  xor         eax,eax 
P>00401012  ret              
P>--- f:\vs70builds\6030\vc\crtbld\crt\src\crt0.c --------------------------------     
P>

Оптимизатор IMHO в вижуалке на сдвигах неверно отрабатывает.
Должно быть иначе.
этот код должен быть эквивалентен:
int sh = 188;
int a = 4;
if( a << (sh & 31) )
{
    printf( "asdf\n" );
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.