En C / C ++, que signifie ce qui suit?
for(;;){ ... }
C’est une boucle infinie, équivalente à while(true)
. Lorsqu’aucune condition de terminaison n’est fournie, la condition par défaut est true
.
Boucle jusqu’à ce qu’une déclaration break
, exit
, throw
etc. à l’intérieur de la boucle s’exécute. Fondamentalement, vous pouvez imaginer une boucle for
composée de:
for (setup; test; advance) ...
Si le “test” est vide, il est considéré comme true
et la boucle continue à s’exécuter. Vide “setup” et “advance” ne font simplement rien.
En C et C ++ (et quelques autres langages également), la boucle for
a trois sections:
Par exemple:
for (i = 1, accum = 0; i <= 10; i++) accum += i;
additionnerons les nombres de 1 à 10 inclus.
C'est à peu près équivalent à ce qui suit:
i = 1; accum = 0; while (i <= 10) { accum += i; i++; }
Toutefois, rien ne nécessite que les sections d'une instruction for
contiennent réellement quoi que ce soit et, si la condition d'itération est manquante, elle est supposée être vraie.
Donc, la boucle for(;;)
signifie simplement:
En d'autres termes, c'est une boucle infinie.
Boucle infinie qui continue jusqu’à ce qu’il y ait une instruction break (), exit () ou goto.
Même si cette réponse suggère que les deux constructions sont équivalentes, il existe une différence subtile entre les deux for(;;)
et while(1)
(qui créent toutes deux des boucles infinies) dans le langage C (et éventuellement dépendant du compilateur).
Certains compilateurs (Windriver DIABData par exemple) se plaignent de “la condition est toujours vraie” lors de l’utilisation de while(1)
.
Passer à for(;;)
permet de se débarrasser de l’avertissement, probablement parce que cette dernière expression est sémantiquement plus forte pour créer une boucle infinie à dessein, et qu’il n’existe pas de condition “toujours vraie” (elle est plus courte à écrire).