Statements
Les instructions sont des fragments du programme C qui sont exécutés en séquence. Le corps de toute fonction est une instruction composée, qui à son tour est une séquence d'instructions et de déclarations :
int main(void) { // début d'une instruction composée int n = 1; // déclaration (pas une instruction) n = n+1; // instruction d'expression printf("n = %d\n", n); // instruction d'expression return 0; // instruction de retour } // fin de l'instruction composée, fin du corps de la fonction
Il existe cinq types d'instructions :
|
Une séquence de spécificateurs d'attributs ( attr-spec-seq ) peut être appliquée à une instruction non étiquetée, auquel cas (sauf pour une instruction d'expression) les attributs sont appliqués à l'instruction respective. |
(since C23) |
Table des matières |
Étiquettes
Toute instruction peut être étiquetée , en fournissant un nom suivi d'un deux-points avant l'instruction elle-même.
attr-spec-seq
(optionnel)
(depuis C23)
identifiant
:
|
(1) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
case
expression-constante
:
|
(2) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
default
:
|
(3) | ||||||||
Toute instruction (mais pas une déclaration) peut être précédée d'un nombre quelconque de labels , chacun déclarant identifier comme un nom de label, qui doit être unique dans la fonction englobante (en d'autres termes, les noms de labels ont une portée de fonction ).
La déclaration d'étiquette n'a aucun effet par elle-même, ne modifie pas le flux de contrôle et n'altère en aucune façon le comportement de l'instruction qui suit.
|
Une étiquette doit être suivie d'une instruction. |
(jusqu'en C23) |
|
Une étiquette peut apparaître sans son instruction suivante. Si une étiquette apparaît seule dans un bloc, elle se comporte comme si elle était suivie d'une instruction nulle . La attr-spec-seq optionnelle est appliquée à l'étiquette. |
(depuis C23) |
Instructions composées
Une instruction composée, ou bloc , est une séquence d'instructions et de déclarations délimitée par des accolades.
{
instruction
|
déclaration
...
(optionnel)
}
|
(jusqu'en C23) | ||||||||
séquence-spécif-attr
(optionnel)
{
instruction-non-étiquetée
|
étiquette
|
déclaration
...
(optionnel)
}
|
(depuis C23) | ||||||||
L'instruction composée permet à un ensemble de déclarations et d'instructions d'être regroupées en une seule unité qui peut être utilisée partout où une instruction unique est attendue (par exemple, dans une instruction if ou une instruction d'itération) :
if (expr) // début de l'instruction if { // début du bloc int n = 1; // déclaration printf("%d\n", n); // instruction d'expression } // fin du bloc, fin de l'instruction if
Chaque instruction composée introduit son propre bloc de portée .
Les initialiseurs des variables ayant une durée de stockage automatique déclarées à l'intérieur d'un bloc et les déclarateurs de VLA sont exécutés lorsque le flux de contrôle passe au-dessus de ces déclarations dans l'ordre, comme s'il s'agissait d'instructions :
int main(void) { // début du bloc { // début du bloc puts("hello"); // instruction d'expression int n = printf("abc\n"); // déclaration, affiche "abc", stocke 4 dans n int a[n*printf("1\n")]; // déclaration, affiche "1", alloue 8*sizeof(int) printf("%zu\n", sizeof(a)); // instruction d'expression } // fin du bloc, portée de n et a se termine int n = 7; // n peut être réutilisé }
Instructions d'expression
Une expression suivie d'un point-virgule est une instruction.
expression
(facultatif)
;
|
(1) | ||||||||
attr-spec-seq
expression
;
|
(2) | (depuis C23) | |||||||
La plupart des instructions dans un programme C typique sont des instructions d'expression, telles que des affectations ou des appels de fonction.
Une instruction d'expression sans expression est appelée une instruction nulle . Elle est souvent utilisée pour fournir un corps vide à une boucle for ou while . Elle peut également être utilisée pour porter un libellé à la fin d'une instruction composée ou avant une déclaration :
puts("hello"); // instruction d'expression char *s; while (*s++ != '\0') ; // instruction nulle
|
La séquence de spécification d'attributs optionnelle attr-spec-seq est appliquée à l'expression.
Une
attr-spec-seq
suivie de
|
(depuis C23) |
Instructions de sélection
Les instructions de sélection choisissent entre l'une des plusieurs instructions en fonction de la valeur d'une expression.
attr-spec-seq
(optionnel)
(depuis C23)
if
(
expression
)
statement
|
(1) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
if
(
expression
)
statement
else
statement
|
(2) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
switch
(
expression
)
statement
|
(3) | ||||||||
Instructions d'itération
Les instructions d'itération exécutent de manière répétée une instruction.
attr-spec-seq
(optionnel)
(depuis C23)
while
(
expression
)
instruction
|
(1) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
do
instruction
while
(
expression
)
;
|
(2) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
for
(
init-clause
;
expression
(optionnel)
;
expression
(optionnel)
)
instruction
|
(3) | ||||||||
Instructions de saut
Les instructions de saut transfèrent inconditionnellement le flux de contrôle.
attr-spec-seq
(optionnel)
(depuis C23)
break
;
|
(1) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
continue
;
|
(2) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
return
expression
(optionnel)
;
|
(3) | ||||||||
attr-spec-seq
(optionnel)
(depuis C23)
goto
identifier
;
|
(4) | ||||||||
Références
- Norme C23 (ISO/IEC 9899:2024):
-
- 6.8 Instructions et blocs (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 6.8 Instructions et blocs (p: 106-112)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 6.8 Instructions et blocs (p: 146-154)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 6.8 Instructions et blocs (p: 131-139)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 3.6 ÉNONCÉS
Voir aussi
|
Documentation C++
pour
Statements
|