В духе таких вопросов, как Выполняете ли ваши тесты в верхней или нижней части?:
Какой стиль вы используете для бесконечного цикла и почему?
- while (true) {}
- do {} while (true);
- for (;;) {}
- label:... метка goto;
В духе таких вопросов, как Выполняете ли ваши тесты в верхней или нижней части?:
Какой стиль вы используете для бесконечного цикла и почему?
while(true) {}
Кажется, он наиболее эффективно передает смысл цикла.
for (;;)
{
/* No warnings are generated about constant value in the loop conditional
plus it is easy to change when you realize you do need limits */
}
#define forever for(;;)
forever {
/*stuff*/
}
ПОЖАЛУЙСТА, ПРИНИМАЙТЕ ОТ (23)
while(1)
{
//do it
}
Как я рулон.
Мне нравится использовать подход for (;;), потому что компилятор MSVС++ жалуется на подход цикла:
void main()
{
while(1) // test.cpp(5) : warning C4127: conditional expression is constant
{
}
for(;;)
{
}
}
Я предпочитаю while(1)
или while(true)
- это самый чистый. do { } while(true)
кажется ненужной обфускацией. Аналогично, for(;;)
может ввести в заблуждение людей, которые никогда не видели его раньше, тогда как while(true)
очень интуитивно понятен. И нет никаких оснований делать label: ... goto label;
, это просто более запутанно.
10 some l33t code
20 goto 10
Бесконечная хвостовая рекурсия;)
Он несколько зависящий от компилятора...
Я использую for (;;)
в языках C-стиля и while true
на языках, которые не поддерживают эту конструкцию.
Я изучил метод for (;;)
в K & R, и он всегда чувствовал себя как идиоматический C для меня.
Я обычно использую for(;;) { }
, который я всегда считаю "вечным".
Некоторые языки предлагают конструкцию repeat { }
, которая будет зависеть от цикла навсегда. Я нахожу конструкцию for(;;) { }
визуально наиболее похожей на нее, потому что она настолько отличается от обычной конструкции for()
. Это важный атрибут для бесконечного цикла, который while(1) { }
действительно не имеет.
При написании кода для себя я использую for (;;). Другие люди, как правило, путаются по синтаксису, поэтому для кода, который другие люди должны видеть/использовать, я использую while (true).
offtopic: если вы думаете о том, что вы пытаетесь выразить, вам обычно не понадобится бесконечный цикл.
for (;;) - это то, что я обычно вижу.
for(;;);
Текст наполнителя.
Пусть начнется огонь...
Если цикл является истинным бесконечным циклом (т.е. нет условия прерывания - только внешнее событие может завершить выполнение потока/процесса), тогда я действительно предпочитаю метку и goto
. Вот почему:
Во-первых, использование while
, for
и do ... while
означает, что цикл может завершиться. Даже если конечное условие никогда не достижимо, синтаксический смысл этих конструкций заключается в том, что есть некоторое условие завершения.
Во-вторых, использование конструкции цикла вводит дополнительный уровень отступа. Я ненавижу отступы, которые не нужны. Он расточает ценную столбчатую недвижимость.
В-третьих, единственный истинный бесконечный цикл - это тот, который безоговорочно возвращается к началу цикла. Только goto
точно соответствует этой цели.
По правде говоря, мне это не очень нравится. Все они выполняют свою работу, и большинство из них в любом случае приведут к тем же инструкциям по сборке. Однако, сборка, которая сгенерирована, по всей вероятности будет безусловным прыжком (если вы оптимизатор стоит того, черт возьми), который напрямую отображает, к какой C-конструкции, дети? Правильно... твой старый друг goto
.
Бесконечные петли - плохая идея, но на практике это не всегда задерживается.
Я предпочитаю while (1) {}, но убедитесь, что что-то внутри цикла может вызвать его прорыв.
Я обычно использую while() {}
, но, узнав, что for(;;) {}
не является своего рода сумасшедшим недействительным синтаксисом, я обязательно буду использовать более уникальный вариант.
Выделяет бесконечные циклы из фактических условных выражений.
Теперь я предпочитаю идиому "for (;;)
", потому что она больше "торчит". Раньше я использовал идиому "while (true)
", потому что я думал, что она выразила намерение лучше, но я переключился, потому что я думаю, что идиома "for (;;)
" достаточно хорошо известна, чтобы адекватно выражать намерение, а также я считаю это лучше будучи более заметными.
Как будто Stroustrup сделал новые ролики на С++ целенаправленно уродливыми - так они торчат.