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, ты задал вопрос и сам на него ответил, мне тему закрывать?

den 25.03.2011 21:03

Ответ: for(;;)
 
Блин, Venom2, оптимизатор компилятора (Visual C++, g++, Intel C++, Borland C++) не будут уничтожать то, что может повлиять на работу программы. А всякие оптимизаторы в IDE могут сдлеать всё что угодно.
Цитата:

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

Den, ты задал вопрос и сам на него ответил, мне тему закрывать?
Да.

HolyDel 26.03.2011 06:25

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

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

и да - пустой бесконечный цикл cl не выкидывает даже в релизе, даже при полной оптимизации по скорости

impersonalis 23.10.2013 01:01

Ответ: for(;;)
 
Что быстрее while (true) или for (;;)?

Черный крыс 23.10.2013 13:46

Ответ: for(;;)
 
Нашли о чем спорить.
Какая тачка быстрее поедет, с круглыми или с квадратными фарами?

Randomize 23.10.2013 16:25

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

Сообщение от Diablo1909 (Сообщение 269230)
Нашли о чем спорить.
Какая тачка быстрее поедет, с круглыми или с квадратными фарами?

С круглыми, очевидно же

Phantom 23.10.2013 19:26

Ответ: for(;;)
 
Ради интереса потестировал чо быстрее работает в PHP.
PHP код:

$counter=0;
  while(
true){
    if(
$counter++>100000) break;
  } 

PHP код:

$counter=0;
  for(;;){
    if(
$counter++>100000) break;
  } 

Вариант кода с while работает в среднем на 12%-15% быстрее.

jimon 25.10.2013 00:03

Ответ: for(;;)
 
Phantom
так это же пхп =)

Phantom 25.10.2013 13:37

Ответ: for(;;)
 
jimon, ну так а то!

А вообще давайте постите, как дело обстоит в других скриптовых и интерпретируемых языках?

den 25.10.2013 16:01

Ответ: for(;;)
 
Чот мне кажется, что сравнивать по времени работы не очень хорошая затея.
Php можно скомпилить во что нибудь?

Phantom 26.10.2013 00:29

Ответ: for(;;)
 
Den, скорее нет, чем да. Есть разве что всякие KPHP, но ими ж никто не пользуется, кроме фейсбука и вконтактика.

moka 26.10.2013 00:33

Ответ: for(;;)
 
php-fpm?

Phantom 26.10.2013 04:05

Ответ: for(;;)
 
Насколько я понял, php-fpm не компилирует скрипты и вообще не понимаю каким он тут боком?


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

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