for loop
Exécute une boucle.
Utilisé comme équivalent plus court de la boucle while .
Table des matières |
Syntaxe
attr-spec-seq
(depuis C23)
(optionnel)
for
(
init-clause
;
cond-expression
;
iteration-expression
)
loop-statement
|
|||||||||
Explication
Se comporte comme suit :
- init-clause peut être une expression ou une déclaration (depuis C99) .
-
- Une init-clause , qui est une expression, est évaluée une fois, avant la première évaluation de cond-expression et son résultat est ignoré.
|
(depuis C99) |
- cond-expression est évaluée avant le corps de la boucle. Si le résultat de l'expression est zéro, l'instruction de boucle est quittée immédiatement.
- iteration-expression est évaluée après le corps de la boucle et son résultat est ignoré. Après l'évaluation de iteration-expression , le contrôle est transféré à cond-expression .
init-clause , cond-expression , et iteration-expression sont tous facultatifs. Si cond-expression est omis, il est remplacé par une constante entière non nulle, ce qui rend la boucle infinie :
for(;;) { printf("boucle infinie !"); }
loop-statement n'est pas facultatif, mais il peut s'agir d'une instruction nulle :
for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // instruction nulle
Si l'exécution de la boucle doit être interrompue à un certain moment, une instruction break peut être utilisée n'importe où dans la loop-statement .
L' instruction continue utilisée n'importe où dans la instruction-de-boucle transfère le contrôle vers l' expression-d-itération .
Un programme avec une boucle infinie a un comportement indéfini si la boucle n'a aucun comportement observable (E/S, accès volatiles, opérations atomiques ou de synchronisation) dans aucune partie de son cond-expression , iteration-expression ou loop-statement . Ceci permet aux compilateurs d'optimiser toutes les boucles non observables sans prouver qu'elles se terminent. Les seules exceptions sont les boucles où la cond-expression est omise ou est une expression constante ; for ( ;; ) est toujours une boucle infinie.
|
Comme toutes les autres instructions de sélection et d'itération, l'instruction for établit une portée de bloc : tout identifiant introduit dans la init-clause , cond-expression , ou iteration-expression sort de la portée après la loop-statement . |
(depuis C99) |
|
attr-spec-seq
est une liste optionnelle d'
attributs
, appliquée à l'instruction
|
(depuis C23) |
Mots-clés
Notes
L'instruction d'expression utilisée comme loop-statement établit sa propre portée de bloc, distincte de la portée de init-clause , contrairement au C++ :
for (int i = 0; ; ) { long i = 1; // C valide, C++ invalide // ... }
Il est possible d'entrer dans le corps d'une boucle en utilisant goto . Lorsqu'on entre dans une boucle de cette manière, init-clause et cond-expression ne sont pas exécutés. (Si le contrôle atteint ensuite la fin du corps de la boucle, une répétition peut survenir incluant l'exécution de cond-expression .)
Exemple
Sortie possible :
Array filled! 1 0 1 1 1 1 0 0
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 6.8.5.3 L'instruction for (p: 110)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 6.8.5.3 The for statement (p: 151)
- Norme C99 (ISO/IEC 9899:1999) :
-
- 6.8.5.3 L'instruction for (p: 136)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 3.6.5.3 L'instruction for
Voir aussi
|
Documentation C++
pour
for
loop
|