Что означает "для (?;)" означает?

В C/C++ что означает следующее?

for(;;){
    ...
}

Ответ 1

Это бесконечный цикл, эквивалентный while(true). Если условие завершения не установлено, по умолчанию значение по умолчанию равно true.

Ответ 2

В C и С++ (и еще несколько других языков) цикл for имеет три раздела:

  • раздел перед циклом, который выполняется до начала цикла;
  • раздел условия итерации, который, в то время как true, выполнит тело цикла; и
  • секция после итерации, которая выполняется после каждой итерации тела цикла.

Например:

for (i = 1, accum = 0; i <= 10; i++)
    accum += i;

добавит числа от 1 до 10 включительно.

Это примерно эквивалентно следующему:

i = 1;
accum = 0;
while (i <= 10) {
    accum += i;
    i++;
}

Однако ничто не требует, чтобы разделы в инструкции for фактически содержали что-либо, и если условие итерации отсутствует, оно считается истинным.

Итак, цикл for(;;) в основном просто означает:

  • не выполняйте никаких настроек цикла;
  • цикл навсегда (разрывы, возврат и т.д.); и
  • не выполняют обработку после итерации.

Другими словами, это бесконечный цикл.

Ответ 3

Петля до тех пор, пока не исполнится оператор break, exit, throw и т.д. внутри цикла. В принципе, вы можете думать о цикле for как состоящем из:

for (setup; test; advance)
    ...

Если "тест" пуст, он считается true, и цикл продолжает работать. Пустые "настройки" и "продвижение" просто ничего не делают.

Ответ 4

Бесконечный цикл, который продолжается до тех пор, пока не будет оператор break(), exit() или goto.

Ответ 5

Даже если этот ответ предполагает, что обе конструкции эквивалентны, существует небольшая разница между for(;;) и while(1) (которые создают бесконечные циклы) в языке C (и, возможно, зависят от компилятора).

Некоторые компиляторы (например, Windriver DIABData) жалуются на "условие всегда верно" при использовании while(1).

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

С другой стороны, язык C++ не имеет значения для обеих конструкций, как сказал Адриан в комментариях:

Стандарт C++ гласит, что пропущенное условие делает подразумеваемое предложение while эквивалентным for ( for-init-statement condition opt; expression opt ) while(true) и for ( for-init-statement condition opt; expression opt ) эквивалентно { for-init-statement while ( condition ) { statement expression; } } { for-init-statement while ( condition ) { statement expression; } }