|
22.03.2011, 22:36
|
#1
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
for(;;)
Зачем во многих примерах, программах в качестве бесконечного цикла пишут вместо while(true) --- for(;;) ??
|
(Offline)
|
|
22.03.2011, 22:43
|
#2
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: for(;;)
То же самое
обозначает
. Можно ещё встретить while(1)
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
22.03.2011, 22:47
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: for(;;)
2Den
никакого глубокого смысла в этом не вижу, разве что forофилия.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
22.03.2011, 23:15
|
#4
|
|
Ответ: for(;;)
Сообщение от Den
Зачем во многих примерах, программах в качестве бесконечного цикла пишут вместо while(true) --- for(; ??
|
На while (true) компилятор выдаст предупреждение о константном выражении, на for (; промолчит.
|
|
|
23.03.2011, 00:57
|
#5
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: for(;;)
а еще в некоторых языках (программирование микроконтроллеров) нету вайла - пишем такой фор !!
А вообще зависит от коддинг стандарта или личных предпочтений !!
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.03.2011, 01:32
|
#6
|
Зануда с интернетом
Регистрация: 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
|
Дэвелопер
Регистрация: 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 за это полезное сообщение:
|
|
23.03.2011, 20:29
|
#8
|
|
Ответ: 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 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
23.03.2011, 21:57
|
#9
|
Дэвелопер
Регистрация: 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
|
AnyKey`щик
Регистрация: 10.11.2008
Сообщений: 18
Написано 4 полезных сообщений (для 5 пользователей)
|
Ответ: for(;;)
Den, Отладку выключи... и код свой не узнаешь =)
__________________
Шутить надо так, чтобы потом не было мучительно больно за бесцельно выбитые зубы.
|
(Offline)
|
|
24.03.2011, 19:40
|
#11
|
Дэвелопер
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.03.2011, 23:11
|
#12
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: for(;;)
страсти
|
(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
|
|
Ответ: 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
|
Зануда с интернетом
Регистрация: 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
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,359
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: 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 за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:38.
|