forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   for(;;) (http://forum.boolean.name/showthread.php?t=14459)

den 22.03.2011 22:36

for(;;)
 
Зачем во многих примерах, программах в качестве бесконечного цикла пишут вместо while(true) --- for(;;) ??

Igor 22.03.2011 22:43

Ответ: for(;;)
 
То же самое
обозначает
. Можно ещё встретить while(1)

impersonalis 22.03.2011 22:47

Ответ: for(;;)
 
2Den
никакого глубокого смысла в этом не вижу, разве что forофилия.

Venom2 22.03.2011 23:15

Ответ: for(;;)
 
Цитата:

Сообщение от Den (Сообщение 183504)
Зачем во многих примерах, программах в качестве бесконечного цикла пишут вместо while(true) --- for(;;) ??

На while (true) компилятор выдаст предупреждение о константном выражении, на for (;;) промолчит.

IGR 23.03.2011 00:57

Ответ: for(;;)
 
а еще в некоторых языках (программирование микроконтроллеров) нету вайла - пишем такой фор !!
А вообще зависит от коддинг стандарта или личных предпочтений !!

impersonalis 23.03.2011 01:32

Ответ: for(;;)
 
Цитата:

Сообщение от Venom2 (Сообщение 183511)
На while (true) компилятор выдаст предупреждение о константном выражении, на for (;;) промолчит.

это по какому стандарту? И в каких компиляторах это соблюдено?

den 23.03.2011 13:46

Ответ: for(;;)
 
Я провёл собственное™ независимое™ раследование™:
IDE - Code::Blocks 10.05
компилятор c++ - gcc 4.4.5

1)
C++
PHP код:

int main()
{
    while(
true)
    {

    }
    return 
0;


при дизасемблинге (дизасемблиировании?) функции main стандартными средствами IDE поучаем:
PHP код:

0x8048464    push   ebp
0x8048465    mov    ebp
,esp
0x8048467    jmp    0x8048467 
<main()+3

2)

C++
PHP код:

int main()
{
    for(;;)
    {

    }
    return 
0;


при дизасемблинге (дизасемблиировании?) функции main стандартными средствами IDE поучаем:
PHP код:

0x8048464    push   ebp
0x8048465    mov    ebp
,esp
0x8048467    jmp    0x8048467 
<main()+3


Вывод: одно и тоже;)

Venom2 23.03.2011 20:29

Ответ: for(;;)
 
Цитата:

Сообщение от impersonalis (Сообщение 183528)
это по какому стандарту? И в каких компиляторах это соблюдено?

Насчет стандарта незнаю, но студийный компилятор ( 2003 - 2008 ) и GCC выкидывают предупреждение на любые константные выражения
в for( ; ; ) выражений нет, потому молчит.

Цитата:

Сообщение от Den (Сообщение 183567)
Я провёл собственное™ независимое™ раследование™:
IDE - Code::Blocks 10.05
компилятор c++ - gcc 4.4.5

1)
C++
PHP код:

int main()
{
    while(
true)
    {

    }
    return 
0;


при дизасемблинге (дизасемблиировании?) функции main стандартными средствами IDE поучаем:
PHP код:

0x8048464    push   ebp
0x8048465    mov    ebp
,esp
0x8048467    jmp    0x8048467 
<main()+3

2)

C++
PHP код:

int main()
{
    for(;;)
    {

    }
    return 
0;


при дизасемблинге (дизасемблиировании?) функции main стандартными средствами IDE поучаем:
PHP код:

0x8048464    push   ebp
0x8048465    mov    ebp
,esp
0x8048467    jmp    0x8048467 
<main()+3


Вывод: одно и тоже;)

Лол
Во-первых такой пустой цикл любой компилятор (имеющий в составе оптимизатор) выбросит, во-вторых все бесконечные циклы одинаковы (по получаемому коду) в пределах одного компилятора (да даже логически - обычный jmp переход), поэтому смысла в сравнении сгенерированного кода нет.

den 23.03.2011 21:57

Ответ: for(;;)
 
Цитата:

Во-первых такой пустой цикл любой компилятор (имеющий в составе оптимизатор) выбросит
1)какой ты знаеш компилятор который это выбросит?? (Visual C++ и GCC - нет)
2)jmp 0x8048467 <main()+3> ------ как видиш не выбросил.
3)выбросить может какой нибуть оптимизатор в IDE но не как в компиляторе, ололо.


Цитата:

во-вторых все бесконечные циклы одинаковы (по получаемому коду) в пределах одного компилятора (да даже логически - обычный jmp переход), поэтому смысла в сравнении сгенерированного кода нет.
Я вообщето это и написал в посте №7
Цитата:

Вывод: одно и тоже;)

ISergey 24.03.2011 01:23

Ответ: for(;;)
 
Den, Отладку выключи... и код свой не узнаешь =)

den 24.03.2011 19:40

Ответ: for(;;)
 
Итак, для особо упоротых (для Venom2 и ISergey):
Компилируем два c++ кода в Release режиме(да да, ISergey, я таки выключил дебаг).
1)
PHP код:

#include <iostream>
using namespace std;
int main()
{
    while(
true)
    {
        
cout << 123//это чтобы шайтан-оптимизатор Venom2'a не выкинул цикл.
    
}
    return 
0;


2)
PHP код:

#include <iostream>
using namespace std;
int main()
{
    for(;;)
    {
        
cout << 123//это чтобы шайтан-оптимизатор Venom2'a не выкинул цикл.
    
}
    return 
0;


на выходе получаем 2 бинарника: for и while.
Теперь в пишем в консоле cmp for while - и что мы видем? НИЧЕГО!
Цитата:

denis@comp:~$ cmp for while
denis@comp:~$
а потом внимательно читаем ман по cmp, и понимаем что она сравниваем пары байтов в файлах, и если обнаружела что они разные то выводит позицию. Если файлы идентичны - она молчит.
Ололо?

Dream 24.03.2011 23:11

Ответ: for(;;)
 
Вложений: 1
страсти

Venom2 25.03.2011 08:15

Ответ: for(;;)
 
Цитата:

Сообщение от Den
1)какой ты знаеш компилятор который это выбросит?? (Visual C++ и GCC - нет)

Любой оптимизирующий.
Цитата:

Сообщение от Den
2)jmp 0x8048467 <main()+3> ------ как видиш не выбросил.

Естественно что пустой цикл никуда не денется, там попросту ничего оптимизировать. Помести внутрь какое-либо условие выхода и увидишь разницу. Если это условие можно вычислить на этапе компиляции, оптимизатор выкинет этот цикл, и значения переменных посчитает, если это возможно.
Цитата:

Сообщение от Den
3)выбросить может какой нибуть оптимизатор в IDE но не как в компиляторе, ололо.

Какой еще оптимизатор в IDE? :D IDE это среда разработки, оптимизатор это часть компилятора.
Цитата:

Сообщение от Den
Я вообщето это и написал в посте №7

Капитан очевидность?

Остальное коментировать не вижу смысла, особенно массу орфографических ошибок. Верно в своем профиле написал - школота.

impersonalis 25.03.2011 10:44

Ответ: for(;;)
 
Цитата:

Какой еще оптимизатор в IDE? :D IDE это среда разработки, оптимизатор это часть компилятора.
Ну не все знают по оптимизаторы и volatile ;)
Больше терпимости

Randomize 25.03.2011 11:39

Ответ: for(;;)
 
Опять копейки считаем, господа. Прям хобби булки оптимизировать то, что и так оптимально.
Den, ты задал вопрос и сам на него ответил, мне тему закрывать?


Часовой пояс GMT +4, время: 17:39.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot