Y a-t-il une raison pour ce genre de boucle?

Existe-t-il une raison d’écrire une boucle for, comme celle-ci en c? (la première instruction est laissée vide et la hauteur est définie à l’extérieur à la place .. et cette variable de hauteur n’est pas utilisée après cela ailleurs non plus)

lastheight = halfheight; . . // some more code changing height, includes setting . // lastheight . // to something that is essentially the height of a wall . height = halfheight; for ( ; lastheight < height ; lastheight++) 

Il est référencé depuis le code source Wolfenstein3D .

Tant que vous êtes dérangé par la syntaxe de la boucle for ,

  for ( ; lastheight < height ; lastheight++) 

est parfaitement valide tant que lastheight est défini et initialisé auparavant.

Citant C11 , chapitre §6.8.5.3

 for ( clause-1 ; expression-2 ; expression-3 ) statement 

[...] Les clauses-1 et expression-3 peuvent être omises. Une expression omise -2 est remplacée par une constante non nulle.


En ce qui concerne la raison de la définition de lastheight dehors de la boucle for , on peut mentionner une chose, à savoir que, pour une construction telle que

  for ( int lastheight = 0 ; lastheight < height ; lastheight++) {...} //C99 and above 

limite la scope de lastheight au lastheight de la boucle for. Si vous souhaitez que lastheight soit utilisé après (en dehors de la scope du) corps de la boucle, vous devez avoir la définition en dehors de la boucle.

De plus, si ma mémoire est bonne, avant la C99, la déclaration d'une variable n'était de toute façon pas possible dans l'instruction for . Donc, le chemin à parcourir était

  int lastheight; for ( lastheight = 0 ; lastheight < height ; lastheight++) {...} 

En outre, voici un lien vers une discussion détaillée sur la syntaxe de la boucle for .

Disclaimer: Ma réponse .

L’écriture :

 height = halfheight; for ( ; lastheight < height ; lastheight++) 

est exactement le même que:

 for ( lastheight = halfheight; lastheight < height ; lastheight++) 

comme lastheight = halfheight; est que votre déclaration initiale sera exécutée une fois avant votre boucle.


En général, une boucle for a la structure suivante:

 for (part1; part2; part3) { .... } 
  • La partie 1 est une instruction qui est exécutée une fois, avant le début de la boucle . Après son exécution, vous entrez dans la boucle et ses instructions commencent à s'exécuter. Cette partie est principalement utilisée pour les initialisations utiles pour la boucle. Si vous le laissez vide, vous ne faites simplement aucune action avant la boucle.
  • La partie 2 est la condition que vous vérifiez à chaque itération .
  • La troisième partie est une déclaration qui est exécutée à la fin de chaque itération .

variable de hauteur n'est pas utilisé après cet ailleurs non plus

Ce n'est pas tout à fait correct. En fait, il est utilisé au début de chaque itération , car la deuxième partie de la boucle for est évaluée au début de chaque itération et la boucle n'est exécutée que si la condition lastheight < height est vraie.