Namespaces
Variants

Statements

From cppreference.net

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)
1) Cible pour goto .
2) Étiquette de cas dans une instruction switch .
3) Étiquette par défaut dans une switch instruction.

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 ; ne forme pas une instruction d'expression. Elle forme plutôt une déclaration d'attribut .

(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)
1) if instruction
2) if instruction avec une clause else
3) switch instruction

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)
1) while boucle
2) do-while boucle
3) for boucle

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)
1) break instruction
2) continue instruction
3) return instruction avec une expression optionnelle
4) goto instruction

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