Plusieurs fois dans les exemples de programmes C, je suis tombé sur ce genre de boucles. Qu'est-ce que ces types de boucles font vraiment? Quel est le besoin de tandis que (vrai); code> est-il utilisé pour une boucle infinie? Est-ce que quelqu'un, s'il vous plaît expliquer ce que la boucle ci-dessus fait vraiment. Je suis nouveau à C Programmation P> P>
8 Réponses :
Oui, il est utilisé pour la boucle infinie, dans ce cas, la meilleure pratique consiste à sortir de la recherche d'une condition
in C toutes boucles boucle pendant qu'une condition est vraie. Donc, un true code> dans la condition signifie vraiment "boucle tandis que
vrai code> est vrai" et donc des boucles pour toujours. P>
Dans pour (;;) code> où ou quelle est la condition? :-)
@Jens, je n'ai accès qu'à la spécification C ++ 11, mais il dit qu'un pour code> est équivalent à un
pendant code> boucle et §2 de la section 6.5.3 dit "une condition manquante rend le
implicite tandis que code> équivalent à
tandis que (vrai) code>"
@Jens in 6.8.5.3 (2): "Une expression expression-2 i> est remplacée par une constante non nulle", où expression-2 i> est la condition de boucle. Donc, la condition est implicitement insérée si vous n'écrivez pas une (mais bien sûr sous la règle AS-Si, vous obtiendrez souvent un saut inconditionnel).
Cette boucle est infinie et si vous avez besoin de votre programme de résilier avec un tel LOP, vous devez avoir soit un Break code> ou un
retour code> (ou dans certains cas, lancez un Exception) La déclaration sous condition donnée dans une telle boucle, sinon un tel programme ne terminera jamais. P>
Une boucle infinie est utile si la vérification de la condition de l'arrêt ne peut être ni faite à l'avant (comme avec pour code> et
pendant code>) ni à l'arrière (comme avec
do {} tandis que code>). Au lieu de cela, vous venez de boucler pour toujours et au milieu du code, vous pouvez vérifier une condition et casser:
si (quelque chose) cassez; code>. P>.
Parfois, nous l'utilisons par exemple: Un exemple de Winsock Windows API, de cette façon, vous pouvez écouter à partir d'un port. p> p>
if(condition) break;
Le facteur de différenciation général entre les boucles suivantes:
for (;;) { doSomething(); } for (;;doSomething()); while (1) { doSomething(); } do { doSomething(); } while (1); while (doSomething(),1); BADPAX: doSomething(); goto BADPAX;
Ces boucles sont utilisées lorsque l'on veut boucle pour toujours et que la condition de démolition de la boucle n'est pas connue. Les conditions de certidian sont situées à l'intérieur de la boucle avec la while(true){
//run this code
if(condition satisfies)
break; //return;
}
Je n'ai jamais vu un
faire alors que (vrai) code>. C'est une boucle infinie, mais la voie idiomatique (et claire) d'écrire un si
pour (;;) code>.