for (int i = 0; i <>255;++i)
{
printf("%d",i);
}
кстати Hex-Rays будет декомпилировать пример из презентации как
int v0 = 0;
do
{
printf("%d",v0);
} while (v0<255);
и что интересно: почему компилятор интерпретирует оператор с предусловием как оператор с постусловием?
Я, например, честно и занудно скомпилировал это в 6-й, 2005 и 2008 студии. IDA показала следующую картинку:
что в переложении Hex-Rays будет
int v0 = 0;
while ( v0 < 255 )
{
printf("%d", v0++);
}
А это уже цикл с предусловием, как и было задумано. Почему не компилиретсяподобно примеру - не понял :-(. Но дядька не брешет - это факт. В дьябле, например, такая же фишка. Все for компилируются как do{} while().
оптимизатор рулит
ОтветитьУдалитьint v0 = 0;
while ( v0 < 255 )
{
printf("%d", v0++);
}
уже на этапе компиляции известно что условие выполнится хотя бы один раз. Поэтому и постусловие
а кстати да, надо поиграться с настройками оптимизации
ОтветитьУдалитьвсе поломано до нас
ОтветитьУдалитьhttp://wasm.ru/article.php?article=1009003