В C/C++ что означает следующее?
for(;;){
...
}
В C/C++ что означает следующее?
for(;;){
...
}
Это бесконечный цикл, эквивалентный while(true)
. Если условие завершения не установлено, по умолчанию значение по умолчанию равно true
.
В C и С++ (и еще несколько других языков) цикл for
имеет три раздела:
Например:
for (i = 1, accum = 0; i <= 10; i++)
accum += i;
добавит числа от 1 до 10 включительно.
Это примерно эквивалентно следующему:
i = 1;
accum = 0;
while (i <= 10) {
accum += i;
i++;
}
Однако ничто не требует, чтобы разделы в инструкции for
фактически содержали что-либо, и если условие итерации отсутствует, оно считается истинным.
Итак, цикл for(;;)
в основном просто означает:
Другими словами, это бесконечный цикл.
Петля до тех пор, пока не исполнится оператор break
, exit
, throw
и т.д. внутри цикла. В принципе, вы можете думать о цикле for
как состоящем из:
for (setup; test; advance)
...
Если "тест" пуст, он считается true
, и цикл продолжает работать. Пустые "настройки" и "продвижение" просто ничего не делают.
Бесконечный цикл, который продолжается до тех пор, пока не будет оператор break(), exit() или goto.
Даже если этот ответ предполагает, что обе конструкции эквивалентны, существует небольшая разница между 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; } }