181 votes

Est plus rapide que « tout en (vrai) » « for(;;) » ? Si ce n’est pas le cas, pourquoi les gens utilisent il ?

for (;;) {
    //Something to be done repeatedly
}

J'ai vu ce genre de chose beaucoup utilisé, mais je pense que c'est plutôt étrange... Ne serait-il pas beaucoup plus clair pour dire while(true), ou quelque chose le long de ces lignes?

Je devine que (comme c'est la raison pour beaucoup un programmeur de recourir à cryptique code) ce n'est qu'une infime marge plus vite?

Pourquoi, et est-il vraiment la peine? Si oui, pourquoi ne pas définir de cette façon:

#define while(true) for(;;)

Voir aussi: Qui est plus rapide: while(1) ou de tout(2)?

279voto

Ben Zotto Points 32105
<ol> <li>Il n’est pas plus rapide.</li> <li>Si vous tenez vraiment, compilez avec sortie assembleur correspondant à votre plate-forme et regarder pour voir.</li> <li>Peu importe. C’est important jamais. Écrivez vos boucles infinies comme bon vous semble.</li> </ol>

191voto

jalf Points 142628

Je préfère for(;;) , pour deux raisons.

L'une est que certains compilateurs produire des avertissements sur while(true) (quelque chose comme "condition de boucle est constante"). En évitant les mises en garde est toujours une bonne chose à faire.

Un autre est que, je pense, for(;;) est plus clair et plus révélateur. Je veux une boucle infinie. Littéralement a pas de condition, il ne dépend de rien. J'ai juste envie de continuer pour l'éternité, jusqu'à ce que je fais quelque chose pour l'interrompre.

Alors qu'avec while(true), eh bien, ce qui est vrai a à voir avec quoi que ce soit? Je ne suis pas intéressé dans la boucle jusqu'à ce que le vrai devient faux, qui est ce que cette forme dit littéralement en boucle (while true est vrai). Je veux juste de la boucle.

Et non, il n'y a absolument aucune différence de performances.

58voto

ta.speot.is Points 15157

Personnellement j’utilise car il ne sont pas tous les numéros en elle, c’est juste un mot clé. Je le préfère à , , , `` etc.

55voto

Mark Harrison Points 77152

En raison de Dennis Ritchie

  • J'ai commencé à utiliser for (;;) parce que Dennis Ritchie est-il dans le K&R, et lors de l'apprentissage d'une nouvelle langue, j'ai toujours essayer d'imiter les gars intelligent.

  • C'est idiomatiques C/C++. C'est probablement mieux dans le long terme pour s'y habituer si vous prévoyez de faire beaucoup dans le C/C++ de l'espace.

  • Votre #define ne fonctionnera pas, car la chose #define avais a ressembler a C identificateur.

  • Tous les compilateurs modernes génère le même code pour les deux constructions.

48voto

Matthew Flaschen Points 131723

Il n’est certainement pas plus rapide dans n’importe quel compilateur sain d’esprit. Ils seront tous deux compilés dans les sauts inconditionnels. La version est plus facile de taper (comme l’a dit Neil) et va être clair, si vous comprenez pour la syntaxe de la boucle.

Si vous êtes curieux, voici ce que gcc 4.4.1 me donne pour x86. Les deux utiliser le x86 l’instruction JMP .

Compile (en partie) :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X