Quelle boucle infinie est préférable d’utiliser

Dupliquer possible:
Est-ce que «for (;;)» est plus rapide que «while (TRUE)»? Si non, pourquoi les gens l’utilisent-ils?

Je lisais un livre de programmation (java) là-bas que l’auteur utilise for(;;) au lieu de while(true) . Cette chose commence vraiment à m’agacer, alors je me suis dit que je devrais vérifier lequel est le mieux à utiliser et s’il y a des différences. Voici les boucles infinies possibles:

 for(;;){ } while(true){ } do{ }while(true) 
  • Lequel est préférable d’utiliser?
  • Existe-t-il des différences dans les performances (comme vous devez vérifier si true est vrai dans le cas de while) ou sont-elles compilées dans le même sens?

Ils sont compilés pour la même chose et sont simplement une question de style. Les anciens programmeurs reconnaîtront peut-être for(;;) , mais j’utiliserais probablement while(true) .

Ouais c’est juste une question de style et je préfère while(true) puisque l’intention est claire tout de suite. for(;;) ne me dit rien.

Les performances doivent être identiques, mais même si ce n’est pas le cas, la vitesse importe moins que la lisibilité. La meilleure méthode est celle qui sera rapidement reconnue comme une boucle infinie par quiconque examine le code. J’aurais tendance à penser à while (true) puisque c’est le cas le plus fondamental, mais cela dépend de qui regarde le code.

En cas de doute, mesurez.

Si rien d’autre, codez les trois versions et regardez l’assemblage généré pour chacune d’elles. À moins que le compilateur soit très stupide, je parierai de l’argent réel, il générera exactement le même code pour les trois.

MODIFIER

FWIW, gcc génère le même code pour les trois (au moins dans les cas simples morts que j’ai écrits). while(true) est calculable au moment de la compilation; il n’est pas nécessaire de faire un test, il suffit de coder en dur un retour au début de la boucle.