Бесконечные петли - верх или низ?

В духе таких вопросов, как Тесты ваших петель сверху или снизу?:

Какой стиль вы используете для бесконечного цикла и почему?

  • while (true) {}
  • do {} while (true);
  • за (;;) { }
  • ярлык: ... перейти к ярлыку;

19 ответов

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(;;), потому что компилятор MSVC++ жалуется на подход цикла while:

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;Смущает.

Я обычно использую for(;;) { } о котором я всегда думаю как о "навсегда".

Некоторые языки предлагают repeat { } конструкция, которая будет изначально цикл навсегда. Я нахожу for(;;) { } построить визуально наиболее похожим на это, потому что он так сильно отличается от нормального for() построить. Это важный атрибут для бесконечного цикла, который while(1) { } на самом деле не имеет.

10 some l33t code
20 goto 10

Бесконечный хвост-рекурсия;)

Это несколько зависит от компилятора...

Я использую for (;;) на языках C-стиля и while true на языках, которые не поддерживают эту конструкцию.

Я узнал for (;;) метод в K&R, и он всегда чувствовал себя идиоматическим Си для меня.

Пусть пламя начнется...

Если цикл является истинным бесконечным циклом (т. Е. Нет условия прерывания - только внешнее событие может прервать выполнение потока / процесса), тогда я на самом деле предпочитаю метку и goto, Вот почему:

Во-первых, использование while, for, а также do ... while, все подразумевают, что цикл может завершиться. Даже если условие завершения никогда не достижимо, синтаксический смысл этих конструкций состоит в том, что существует некоторое условие завершения.

Во-вторых, использование конструкции цикла добавляет дополнительный уровень отступа. Я ненавижу отступы, в которых нет необходимости. Это пустая трата ценной недвижимости.

В-третьих, единственным истинным бесконечным циклом является тот, который безоговорочно возвращается назад к началу цикла. Только goto точно соответствует этой цели.

Правда в том, что меня это не особо волнует. Все они выполняют свою работу, и в любом случае большинство из них приведут к одинаковым инструкциям по сборке. Тем не менее, сгенерированная сборка, по всей вероятности, будет безусловным переходом (если вы оптимизатор, чёрт побери), который напрямую связывается с какой конструкцией C, дети? Это верно... твой старый друг goto,

Оффтоп: если вы думаете о том, что пытаетесь выразить, вам обычно не понадобится бесконечный цикл.

При написании кода для себя я использую для (;;). Другие люди, как правило, сбиты с толку его синтаксисом, и поэтому для кода, который другие люди должны видеть / использовать, я использую while(true).

Для (;;) это то, что я обычно вижу.

for(;;);

Наполнитель текста.

Бесконечные циклы - плохая идея, но на практике это не всегда так.

Я предпочитаю while(1) { }, но убедитесь, что что-то внутри цикла может вызвать его разрыв.

Я обычно использую while() {}но, узнав, что for(;;) {} не какой-то сумасшедший неверный синтаксис, я обязательно буду использовать более уникальную опцию.

Видите ли, дифференцирует бесконечные циклы от реальных условных выражений.

Я сейчас предпочитаюfor (;;)"идиома, потому что она, кажется, больше" торчит ". Я использовал"while (true)"идиома, потому что я думал, что это выражало намерение лучше, но я переключился, потому что я думаю, что"for (;;)"Идиома достаточно известна, чтобы адекватно выражать намерения, и я считаю, что лучше быть более заметным.

Что-то вроде того, как Страуструп целенаправленно делал новые приведения в C++ безобразными - так что они выпали.

Другие вопросы по тегам