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:
for (i=0;i<5;i++)
{
}
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