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.
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 (; ; ) { // ... }
c'est une boucle infinie.
égal à
while (true) {
}
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.
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
}
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)
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.
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.
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.
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 (; ; ){ // ...}
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;)