2011-01-05 4 views
9

Я искал через некоторые примеры исходного кода для приложения я использую, и я наткнулся на эту строку:Использование «for (;;)» в приложении C#?

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

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

+1

Определенный дубликат [Что делает цикл C# для цикла, когда все выражения отсутствуют.например, для (;;) {}] (http://stackoverflow.com/questions/697307/what-does-ac-for-loop-do-when-all-the-expressions-are-missing-eg-for) – paxdiablo

ответ

12

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

Из documentation for for:

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

for (; ;) 
{ 
    // ... 
} 
+0

Спасибо, это обычная практика (IE: Не взломать?) – JuniorDeveloper1208

+2

Следует отметить, что у вас должно быть условие, из-за которого можно было бы от него отказаться, чтобы иметь бесконечный цикл, как правило, плохо ... @toleero , это вопрос стиля. Мне нравится использовать цикл while (true) {} 'вместо этого, он более прямой к точке IMO, но одна из них является стандартной практикой. –

+1

@ t84 - Довольно распространено, хотя многие используют 'while (true) {}' для удобочитаемости. – Oded

7

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

равна

while (true) { 
} 
0

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

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

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

1

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

0

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

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

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

1

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

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

for (;true;) 

или:

while (true) 
0

Нормальный цикл имеет эти элементы

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

eg

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

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

Язык C# specification конкретно говорится

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

Так, for(;;) такая же, как for(;true;)

2

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

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

регулярный цикл выглядит следующим образом:

for (do_before_loop**;** finish_loop_when_this_condition_is_false**;** do_after_each_iteration);

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

3

Обычно Вы пишете свой цикл, как это:

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

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

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

Технически, поскольку цикл должен быть бесконечным, все, что вам нужно удалить, - это условие (i <10). –

0

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

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.

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

Смежные вопросы