9.6.1 Les variables locales

Icône de l'outil pédagogique Les variables locales

En Langage C, toute variable définie à l'intérieur du corps d'une fonction est dite locale à cette fonction, c'est‐à‐dire qu'elle n'est connue que de cette fonction. Les autres fonctions ne peuvent jamais l'utiliser.

Ici, les deux variables locales n et le paramètre (formel) n des trois fonctions fonction1, fonction2 et main n'ont aucun lien entre eux à part un nom identique ; il s'agit en fait de trois variables différentes, correspondant à trois emplacements mémoire distincts. A chaque exécution de l'appel d'une fonction, la variable locale ou le paramètre n sont redéfinis, et ils sont détruits à la fin de l'exécution de la fonction.

Les variables locales sont définies dans la zone particulière de la mémoire appelée la pile, tout comme les paramètres (formels) qui accueillent les valeurs transmises en argument lors d'un appel.

Les paramètres formels qui sont créés dans l'en‐tête d'une fonction ont toutes les caractéristiques des variables locales : création à l'entrée dans la fonction, visibilité limitée à la fonction, destruction à la fin de l'exécution de la fonction. La seule différence entre paramètre formel et variable locale réside dans leur valeur initiale : le paramètre formel est toujours créé avec une valeur initiale (l'argument d’appel fourni par la fonction appelante), alors que l'initialisation de la variable locale est laissée à l'appréciation du programmeur. A ce détail près, le terme "variable locale" peut parfaitement englober les paramètres qui apparaissent dans l'en‐tête de fonction.

La valeur d'une variable locale ne se retrouve pas d'une exécution à l'autre de la fonction. Si ce doit être le cas, il faut la définir comme « variable locale statique » avec le mot‐clé static (voir le chapitre "Classes d'allocation mémoire", variable de bloc statique). Elle est alors définie en dehors de la pile et sa durée de vie devient permanente. Mais sa visibilité reste limitée à la fonction où elle est définie.

En résumé, retenons qu'une variable locale "normale" a une portée limitée à la fonction où elle est définie et que sa valeur n'est pas conservée après l'exécution de la fonction.