Version longue...
Un collègue a affirmé aujourd'hui après avoir vu mon utilisation while (1)
dans un script Perl for (;;)
plus rapide. J'ai fait valoir qu'ils devraient être les mêmes en espérant que l'interprète optimiserait les différences. J'ai mis en place un script qui exécuterait 1 000 000 000 pour les itérations de boucle et le même nombre de boucles while et enregistrerait le temps entre les deux. Je n'ai trouvé aucune différence appréciable. Mon collègue a dit qu'un professeur lui avait dit que le while (1)
faisait une comparaison 1 == 1
et que for (;;)
non. Nous avons répété le même test avec le 100x le nombre d'itérations avec C ++ et la différence était négligeable. C'était cependant un exemple graphique de la rapidité avec laquelle le code compilé peut être comparé à un langage de script.
Version courte...
Y a-t-il une raison de préférer un while (1)
à un for (;;)
si vous avez besoin d'une boucle infinie pour sortir?
Remarque: si cela ne ressort pas clairement de la question. C'était purement une discussion académique amusante entre deux amis. Je suis conscient que ce n'est pas un concept très important sur lequel tous les programmeurs devraient se débattre. Merci pour toutes les bonnes réponses que j'ai (et je suis sûr que d'autres) ont appris quelques choses de cette discussion.
Mise à jour: Le collègue susmentionné a pesé avec une réponse ci-dessous.
Cité ici au cas où il serait enterré.
Il est venu d'un programmeur d'assemblage AMD. Il a déclaré que les programmeurs C (les gens) ne réalisent pas que leur code est inefficace. Il a cependant dit aujourd'hui que les compilateurs gcc sont très bons et mettent des gens comme lui à la faillite. Il a dit par exemple, et m'a parlé du
while 1
contrefor(;;)
. Je l'utilise maintenant par habitude mais gcc et surtout les interprètes feront la même opération (un saut de processeur) pour les deux ces jours, puisqu'ils sont optimisés.