Что значит «для (;;)»? - PullRequest
       25

Что значит «для (;;)»?

21 голосов
/ 04 февраля 2011

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

for(;;){
    ...
}

Ответы [ 5 ]

30 голосов
/ 04 февраля 2011

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

8 голосов
/ 04 февраля 2011

В C и 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(;;) в основном означает:

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

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

6 голосов
/ 04 февраля 2011

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

for (setup; test; advance)
    ...

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

4 голосов
/ 04 февраля 2011

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

2 голосов
/ 08 сентября 2018

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...