Тема: for(;;)
Показать сообщение отдельно
Старый 23.03.2011, 20:29   #8
Venom2
 
Сообщений: n/a
Ответ: for(;;)

Сообщение от 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 переход), поэтому смысла в сравнении сгенерированного кода нет.
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо за это полезное сообщение:
FireOwl (26.03.2011), impersonalis (23.03.2011), moka (23.03.2011)