Effet du point-virgule après la boucle ‘pour’

Dites que je veux imprimer un message en C cinq fois en utilisant une boucle for . Pourquoi est-ce que si j’ajoute un point-virgule après une boucle comme ceci:

 for (i=0;i<5;i++); 

le message n’est pas imprimé 5 fois, mais si je n’y mets pas le point-virgule?

Le point-virgule est une déclaration légitime appelée déclaration nulle * qui signifie “ne rien faire”. Comme la boucle for exécute une seule opération (qui pourrait être un bloc compris entre {} ), le point-virgule est traité comme le corps de la boucle, ce qui entraîne le comportement que vous avez observé.

Le code suivant

  for (i=0;i<5;i++); { printf("hello\n"); } 

est interprété comme suit:

  • Répétez cinq fois for (i=0;i<5;i++)
  • ... ne faites rien (point-virgule)
  • Ouvrir une nouvelle scope pour les variables locales {
  • ... Imprimer "bonjour"
  • Fermer la scope }

Comme vous pouvez le voir, l'opération qui se répète est ; , pas le printf .


* Voir K & R , section 1.5.2

 for (i=0;i<5;i++); 

est équivalent à

 for (i=0;i<5;i++){} 

La déclaration consistant en seulement le ; Le jeton est appelé l’ instruction null et il ne fait que … rien.

Par exemple, ceci est valide:

 void foo(void) { ; ; ; } 

Il peut être utilisé partout où une déclaration peut être utilisée, par exemple dans:

 if (bla) ; else ; 

Voir le paragraphe de la norme C:

(C99, 6.8.3p3) “Une instruction null (consistant en un point-virgule) n’effectue aucune opération.”

Ce code ci-dessous affichera “Bonjour” 5 fois.

  for(i=0;i<5,printf("Hello\n");i++); 

De nombreux compilateurs affichent une erreur de syntaxe lorsque vous insérez un point-virgule après une boucle for mais, selon le compilateur gcc (Linux) ou Dev-cpp, vous pouvez placer un point-virgule après une boucle for.

Par exemple

 for(int i=0;i<=5;i++); 

ou

 for(int i=0;i<=5;i++) {//blank body} 

Dans l'exemple ci-dessus, il est clair que nous plaçons des accolades vides ou un point-virgule après la boucle for, ce qui signifie que nous n'avons pas encore entré de variable.

Maintenant, venez à votre question.
Si vous voulez imprimer bonjour cinq fois, vous devez écrire votre programme en tant que

 for(int i=0;i<5;i++) { printf("hello"); } 

J'espère que tu comprends
à votre santé!!
Rahul Vashisth