Использование "for (;;)" в приложении C #? - PullRequest
14 голосов
/ 05 января 2011

Я просматривал пример исходного кода для приложения, которое я использую, и наткнулся на эту строку:

for (;;)
{
// The rest of the application's code
}

Похоже, это создает бесконечный цикл, но я не знаком с ";;" и это очень трудно для Google, к сожалению.

Ответы [ 10 ]

16 голосов
/ 05 января 2011

Да, это бесконечный цикл.Это обычный цикл for без выражения условия.

Из документации для for:

Все выражения оператора for являются необязательными;например, следующая инструкция используется для записи бесконечного цикла:

for (; ; )
{
    // ...
}
7 голосов
/ 05 января 2011

это бесконечный цикл.

равно

while (true) {
}
3 голосов
/ 05 января 2011

Обычно вы пишете свой цикл следующим образом:

for (int i = 0; i < 10; i++)
{
// The rest of the application's code
}

Теперь, когда вы хотите, чтобы ваш цикл был бесконечным, вам просто нужно удалить "int i = 0", условие "i <10"и увеличение" i ++ ".Если Вы сделаете это, то в выражении for вы увидите только «;;» </p>

for (;;)
{
// The rest of the application's code
}
3 голосов
/ 05 января 2011

Я просто хочу уточнить:

;; не является специальным оператором или чем-то - это регулярный цикл for.

регулярный цикл for выглядит так:*for (do_before_loop**;** finish_loop_when_this_condition_is_false**;** do_after_each_iteration);

если вы оставите все 3 части пустыми, вы получите ;; - а поскольку у вас нет условия выхода - это бесконечный цикл.

2 голосов
/ 05 января 2011

Да, это бесконечный цикл.

Все параметры в операторе for являются необязательными, и условие по умолчанию равно true, поэтому оно такое же, как:

for (;true;)

или

while (true)
1 голос
/ 05 января 2011

Это то же самое, что и for (<initial>; <condition>; <increment>), вы просто пропускаете начальное значение, условие и приращение. В этом случае условие всегда будет считаться истинным.

0 голосов
/ 18 марта 2016

Это обычное использование бесконечного цикла. Мы используем этот цикл на тот случай, если не знаем, сколько раз нам нужно выполнить код внутри цикла. Поэтому нам нужно также определить условие, чтобы выйти из этого цикла. Вот пример получения длинного сообщения с сервера:

for (;;)
{
     //Receive the maximum allowed size of the message
     //Save(Concatenate) the received data in a variable (TotalReceivedData)
     // If the length of the received part of the message is equal to zero , break the operation
     //<Break the loop>if(message.length == 0){break;}</Break the loop> 
} 

И здесь вы можете использовать полностью полученное сообщение, хранящееся в переменной TotalReceivedData.

Я добавил этот пример, потому что только что натолкнулся на такой случай.

0 голосов
/ 05 января 2011

нормаль для цикла имеет эти элементы

 for ( for-initializer ; for-condition ; for-iterator ) embedded-statement

, например

for(int i = 0 ; i < 10 ; i++) {
   foo();
}

Любой из этих элементов можно опустить, и у вас останется for(;;), что является бесконечным циклом.

Язык c # Спецификация специально гласит

Если условие для пропущено из для заявления, затем оценка определенное назначение происходит так, как будто для условия были заменены на истинные в приведенном выше расширении.

Итак, for(;;) совпадает с for(;true;)

0 голосов
/ 05 января 2011

Это первая запись в Google, если вы заинтересованы, я погуглил C # для ;; И получил эту ссылку http://msdn.microsoft.com/en-us/library/ch45axte.aspx Нажмите C # и MSDN заявляет:

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

для (;;) { // ... }

0 голосов
/ 05 января 2011

Интересное прочтение в этой статье:

http://csharpdevelop.blogspot.com/2004/05/writing-infinite-loop.html

Этот вид кода встречается довольно часто в рабочих потоках, ожидающих какую-то работу.Это общий шаблон кода.Весь код в теле операторов цикла является критическим.«Условие выхода» необходимо часто проверять.Это подразумевает, что работа должна быть короткой.Обычно это один маленький кусок работы из большого набора работ, который ему было поручено выполнить.

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