Boucle en C/C++

Il y a plusieurs possibilités de faire une boucle sans fin, voici quelques je choisirais:

  • for(;;) {}
  • while(1) {} /while(true) {}
  • do {} while(1) /do {} while(true)

Est-il une certaine forme qui l'on doit choisir? Et ne les compilateurs modernes de faire une différence entre le milieu et la dernière déclaration ou fait réaliser que c'est une boucle sans fin et ignore la vérification de la partie entièrement?

Edit: comme il a été mentionné que j'avais oublié goto, mais cela a été fait en dehors de la raison que je ne l'aime pas comme un commandement à tous.

Edit2: j'ai fait un grep sur les versions les plus récentes prises de kernel.org. Je ne me semble que rien n'a vraiment changé au fil du temps (dans le Noyau au moins)
Boucle en C/C++

  • Je crois que vous avez oublié endless: GOTO endless;
  • Je pense que vous devriez choisir l'option qui rend le code lisible assez comme while (true) {}
  • Nope, ce n'est pas une boucle sans fin, il en résulte un dépassement de capacité.
  • Une "pile" de débordement. Hein??? Eeh?
  • Vous avez oublié le GOTO possibilité.
  • Ce lien n'est pas seulement pour C#, il contient simplement non-sens subjectif avec tout le monde hautement ses opinions personnelles.
  • Vous pouvez également faire un appel récursif à la queue-appel (en supposant que votre compilateur ne la queue-appel d'optimisation). c'est à dire void loop() { ...; loop(); }.
  • Cela a déjà été posée ici: stackoverflow.com/questions/224138/infinite-loops-top-or-bottom
  • il a également été demandé sur les programmeurs.stackexchange si je me souviens bien. Qui est à droite, comme de l'omi, c'est plutôt une opinion fondée.
  • Personnellement, j'essaie d'éviter cette construction, et vient de mettre la rupture condition dans le contrôle de l'énoncé où il est censé aller. Si je ne peux pas obtenir autour d'elle, je vais utiliser while(true) bien.
  • il n'a jamais ignore la vérification de la partie, sauf si elle est programmmed à faire, ou que quelque chose va mal.
  • La plupart des réponses ici miss la subtilité qu'il n'est généralement pas vraiment une boucle sans fin qui a été écrit, simplement celui dont les conditions de sortie ne sont pas testés au le haut ou le bas du corps de la boucle, mais dans le milieu quelque part (ce qui en soi, pour une bonne raison, est généralement considérée comme quelque chose à éviter). Ainsi, tout texte qui implique 'forever' est au moins un abus de langage, même si la plupart des programmeurs savent que "pour toujours" ne veut pas dire pour toujours.
  • Je propose #define jamais, alors que(1) Le problème est que ce n'est pas vraiment sans fin, il va finir sur les signaux/sous-système étant terminé. J'ai besoin d'un meilleur nom pour elle... until_subsystem_terminates n'est pas aussi attrayant.
  • Bien que certainement une possibilité, si le sentiment que les macros sont une manière horrible ti atteindre le but que les gens ont en fait à la recherche de la définition de la macro afin de le comprendre.
  • simple grep sur linux 4.10.10 sources du noyau: 'for(;;)' - 57 occurrences; 'while(true)' - 1; 'while(1)' - 82
  • C'est très intéressant. Je me demande comment ces chiffres ont évolué au fil du temps.
  • peut 'grep -R" et kernel.org être avec vous 🙂
  • J'ai ajouté un graphique à ce sujet. Pour quiconque s'intéresse aussi à elle.
  • Aucun d'entre eux sont garantis sans fin les boucles en C++. Choisissez votre langue, le C et le C++ sont des langues différentes!

InformationsquelleAutor magu_ | 2013-11-25