2013-09-18 3 views
0
6.8.5.6 
An iteration statement whose controlling expression is not a constant expression, 
that performs no input/output operations, does not access volatile objects, and 
performs no synchronization or atomic operations in its body, controlling 
expression, or (in the case of a for statement) its expression-3, may be assumed 
by the implementation to terminate. 

Компилятор готов к завершению цикла, если выполнено вышеуказанное условие. Это правда? Если да, я пытался имитировать сценарий такого рода, но не успел. Я попытался,Когда компилятор может завершить цикл?

int main() 
{ 
    // Some statements... 
    { 
     int a = 0; 
     int b = 100; 
     int i=0; 
     while(++i>=0) 
     { 
      a = b; 
     } 
    } 
    // Some statements... 
    return 0; 
} 

Может кто-нибудь помочь мне, чтобы имитировать этот сценарий.

Thanks,

+0

Я использую VS 2010, мне нужно включить оптимизацию или сделать некоторые изменения конфигурации, чтобы имитировать этот сценарий? – StackIT

+0

Нет, вам нужен надлежащий компилятор C. VS2010 нет. – MSalters

ответ

0

Ну, компилятор может предположить что-либо там. Целочисленное переполнение - неопределенное поведение. Если вы написали while (i==0) 6.8.5.6.

0

Попробуйте использовать уровни оптимизации компилятора, такие как -O2, -O3. Это должно помочь вам :)

Примечание:

Для GCC семейства компиляторов попробовать -O2 или -O3

Для MSVC попробовать /O2 или/O3

Смежные вопросы