Сообщение от impersonalis
это по какому стандарту? И в каких компиляторах это соблюдено?
|
Насчет стандарта незнаю, но студийный компилятор ( 2003 - 2008 ) и GCC выкидывают предупреждение на любые константные выражения
в for( ; ; ) выражений нет, потому молчит.
Сообщение от Den
Я провёл собственное™ независимое™ раследование™:
IDE - Code::Blocks 10.05
компилятор c++ - gcc 4.4.5
1)
C++
int main() { while(true) { } return 0; }
при дизасемблинге (дизасемблиировании?) функции main стандартными средствами IDE поучаем:
0x8048464 push ebp 0x8048465 mov ebp,esp 0x8048467 jmp 0x8048467 <main()+3>
2)
C++
int main() { for(;;) { } return 0; }
при дизасемблинге (дизасемблиировании?) функции main стандартными средствами IDE поучаем:
0x8048464 push ebp 0x8048465 mov ebp,esp 0x8048467 jmp 0x8048467 <main()+3>
Вывод: одно и тоже
|
Лол
Во-первых такой пустой цикл любой компилятор (имеющий в составе оптимизатор) выбросит, во-вторых все бесконечные циклы одинаковы (по получаемому коду) в пределах одного компилятора (да даже логически - обычный jmp переход), поэтому смысла в сравнении сгенерированного кода нет.