Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 22.03.2011, 22:36   #1
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Радость for(;;)

Зачем во многих примерах, программах в качестве бесконечного цикла пишут вместо while(true) --- for(;;) ??
(Offline)
 
Ответить с цитированием
Старый 22.03.2011, 22:43   #2
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: for(;;)

То же самое
обозначает
. Можно ещё встретить while(1)
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 22.03.2011, 22:47   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: for(;;)

2Den
никакого глубокого смысла в этом не вижу, разве что forофилия.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
den (22.03.2011), Gector (23.10.2013), pax (23.03.2011), Phantom (24.03.2011)
Старый 22.03.2011, 23:15   #4
Venom2
 
Сообщений: n/a
Ответ: for(;;)

Сообщение от Den Посмотреть сообщение
Зачем во многих примерах, программах в качестве бесконечного цикла пишут вместо while(true) --- for(; ??
На while (true) компилятор выдаст предупреждение о константном выражении, на for (; промолчит.
 
Ответить с цитированием
Старый 23.03.2011, 00:57   #5
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: for(;;)

а еще в некоторых языках (программирование микроконтроллеров) нету вайла - пишем такой фор !!
А вообще зависит от коддинг стандарта или личных предпочтений !!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (24.03.2011)
Старый 23.03.2011, 01:32   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: for(;;)

Сообщение от Venom2 Посмотреть сообщение
На while (true) компилятор выдаст предупреждение о константном выражении, на for (; промолчит.
это по какому стандарту? И в каких компиляторах это соблюдено?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.03.2011, 13:46   #7
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: for(;;)

Я провёл собственное™ независимое™ раследование™:
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

Вывод: одно и тоже
(Offline)
 
Ответить с цитированием
Эти 9 пользователя(ей) сказали Спасибо den за это полезное сообщение:
BlackDragon (23.03.2011), FireOwl (25.10.2013), Gector (23.10.2013), h1dd3n (23.03.2011), HolyDel (24.03.2011), moka (23.03.2011), Phantom (24.03.2011), Randomize (08.07.2020), St_AnGer (25.03.2011)
Старый 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)
Старый 23.03.2011, 21:57   #9
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: for(;;)

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


во-вторых все бесконечные циклы одинаковы (по получаемому коду) в пределах одного компилятора (да даже логически - обычный jmp переход), поэтому смысла в сравнении сгенерированного кода нет.
Я вообщето это и написал в посте №7
Вывод: одно и тоже
(Offline)
 
Ответить с цитированием
Старый 24.03.2011, 01:23   #10
ISergey
AnyKey`щик
 
Регистрация: 10.11.2008
Сообщений: 18
Написано 4 полезных сообщений
(для 5 пользователей)
Ответ: for(;;)

Den, Отладку выключи... и код свой не узнаешь =)
__________________
Шутить надо так, чтобы потом не было мучительно больно за бесцельно выбитые зубы.
(Offline)
 
Ответить с цитированием
Старый 24.03.2011, 19:40   #11
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: for(;;)

Итак, для особо упоротых (для Venom2 и ISergey):
Компилируем два c++ кода в Release режиме(да да, ISergey, я таки выключил дебаг).
1)
#include <iostream>
using namespace std;
int main()
{
    while(
true)
    {
        
cout << 123//это чтобы шайтан-оптимизатор Venom2'a не выкинул цикл.
    
}
    return 
0;

2)
#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, и понимаем что она сравниваем пары байтов в файлах, и если обнаружела что они разные то выводит позицию. Если файлы идентичны - она молчит.
Ололо?

Последний раз редактировалось den, 24.03.2011 в 19:54. Причина: Уважайте участников форума.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
h1dd3n (25.03.2011)
Старый 24.03.2011, 23:11   #12
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: for(;;)

страсти
Миниатюры
Нажмите на изображение для увеличения
Название: 622px-Скандалы_интриги_расследования.jpg
Просмотров: 883
Размер:	74.1 Кб
ID:	13099  
(Offline)
 
Ответить с цитированием
Эти 13 пользователя(ей) сказали Спасибо Dream за это полезное сообщение:
Android (25.03.2011), den (24.03.2011), falcon (25.03.2011), FireOwl (26.03.2011), HolyDel (25.03.2011), moka (24.03.2011), Phantom (24.03.2011), Randomize (24.03.2011), RBK (25.03.2011), Reks888 (24.03.2011), SBJoker (25.03.2011), St_AnGer (25.03.2011), Tadeus (24.03.2011)
Старый 25.03.2011, 08:15   #13
Venom2
 
Сообщений: n/a
Ответ: for(;;)

Сообщение от Den
1)какой ты знаеш компилятор который это выбросит?? (Visual C++ и GCC - нет)
Любой оптимизирующий.
Сообщение от Den
2)jmp 0x8048467 <main()+3> ------ как видиш не выбросил.
Естественно что пустой цикл никуда не денется, там попросту ничего оптимизировать. Помести внутрь какое-либо условие выхода и увидишь разницу. Если это условие можно вычислить на этапе компиляции, оптимизатор выкинет этот цикл, и значения переменных посчитает, если это возможно.
Сообщение от Den
3)выбросить может какой нибуть оптимизатор в IDE но не как в компиляторе, ололо.
Какой еще оптимизатор в IDE? :D IDE это среда разработки, оптимизатор это часть компилятора.
Сообщение от Den
Я вообщето это и написал в посте №7
Капитан очевидность?

Остальное коментировать не вижу смысла, особенно массу орфографических ошибок. Верно в своем профиле написал - школота.
 
Ответить с цитированием
Старый 25.03.2011, 10:44   #14
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: for(;;)

Какой еще оптимизатор в IDE? :D IDE это среда разработки, оптимизатор это часть компилятора.
Ну не все знают по оптимизаторы и volatile
Больше терпимости
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 25.03.2011, 11:39   #15
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: for(;;)

Опять копейки считаем, господа. Прям хобби булки оптимизировать то, что и так оптимально.
Den, ты задал вопрос и сам на него ответил, мне тему закрывать?
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
Gector (23.10.2013), Igor (25.03.2011), moka (25.03.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com