web-dev-qa-db-fra.com

Utilisation de "for (;;)" dans une application C #?

J'ai consulté un exemple de code source pour une application que j'utilise et je suis tombé sur cette ligne:

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

On dirait que c'est pour créer une boucle infinie, mais je ne suis pas familier avec ";;" et c'est très difficile à Google malheureusement.

13

Oui, c'est une boucle infinie. C'est une boucle for ordinaire sans expression de condition.

À partir de documentation for for :

Toutes les expressions de l'instruction for sont facultatives; Par exemple, l'instruction suivante est utilisée pour écrire une boucle infinie:

for (; ; )
{
    // ...
}
15
Mark Byers

c'est une boucle infinie.

égal à

while (true) {
}
7
user467871

Je veux juste clarifier: 

;; n'est pas un opérateur spécial ou quelque chose du genre - c'est une boucle régulière.

la boucle for normale ressemble à ça:

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

si vous laissez les 3 parties vides, vous obtenez ;; - et puisque vous n'avez pas de condition de sortie - c'est une boucle infinie.

3
SivGo

Normalement, vous écrivez votre boucle comme ceci:

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

Maintenant, lorsque vous voulez que votre boucle soit infinie, il vous suffit de supprimer "int i = 0", la condition "i <10" et l'incrémentation "i ++". Si vous faites cela, alors dans une déclaration for, vous ne verrez que ";;"

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

Oui, c'est une boucle infinie.

Tous les paramètres de l'instruction for sont facultatifs et la condition par défaut est true. Elle est donc identique à:

for (;true;)

ou:

while (true)
2
Guffa

C'est la même chose que for (<initial>; <condition>; <increment>), vous omettez simplement l'initiale, la condition et l'incrément. Dans ce cas, la condition sera toujours considérée comme vraie.

1
Ronnie Howell

Lecture intéressante dans cet article:

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

Ce type de code survient assez Dans les threads de travail qui attendent que Travail soit effectué. C'est un modèle de code commun . Tout le code dans le corps des instructions en boucle Est essentiel. La "condition de quitter " Doit être vérifiée fréquemment. Cela implique que le travail à effectuer doit être Court. Habituellement, il s’agit d’un plus petit Groupe de travail parmi le plus grand ensemble de Travaux qu’il a été confié pour accomplir.

0
James Wiseman

C'est une utilisation ordinaire de la boucle infinie. Nous utilisons cette boucle au cas où nous ne sachions pas combien de fois nous avons besoin d'exécuter le code à l'intérieur de la boucle. Par conséquent, nous devons également définir une condition pour sortir de cette boucle. Voici un exemple de réception d'un long message d'un serveur:

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> 
} 

Et vous pouvez utiliser ici le message complet reçu dans la variable TotalReceivedData.

J'ai ajouté cet exemple parce que je viens de rencontrer un cas comme celui-ci.

0
YANKEE

C’est la première entrée de google si vous êtes intéressé. J'ai cherché dans Google C # pour ;; Et obtenu ce lien http://msdn.Microsoft.com/en-us/library/ch45axte .aspx Cliquez sur C # et les états msdn:

Toutes les expressions de l'instruction for sont facultatives; Par exemple, l'instruction suivante est utilisée pour écrire une boucle infinie:

pour (; ; ){ // ...}

0
JonH

Une boucle normale pour a ces éléments

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

par exemple.

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

N'importe lequel de ces éléments peut être omis et il ne vous reste que for(;;), qui est une boucle infinie.

Le langage c # spécification indique spécifiquement 

Si la condition for est omise dans La déclaration for, alors l'évaluation de Cession définitive se déroule comme si For-condition était remplacé par true Dans ce qui précède expansion.

Donc, for(;;) est identique à for(;true;)

0
nos