Portée, durée et liaison

Portée

La portée d'une variable désigne les endroits où elle peut être accédée.

Les variables peuvent être :

  • locales : elles ne sont accessibles que dans le bloc où elles ont été déclarées (variables locales, paramètres de fonctions, types définis par l'utilisateur comme des énumérations ou des classes s'ils ont été définis dans un bloc).
  • globales : elles sont accessibles n'importe où dans le fichier (variables globales, fonctions, types définis par l'utilisateur s'ils n'ont pas été définis dans un bloc.

Durée

La durée d'une variable détermine quand elle est créée et détruite. Il y a trois durées possibles : - automatique : les variables sont créées là où elles sont définies et détruites à la fin du bloc . Ce sont les variables locales et les paramètres. - statiques : elles sont créées et détruites en même temps que le programme. Ce sont les variables globales et les variables déclarées avec le mot clé static. - dynamiques : elles sont crées et détruites à la demande par les opérateurs d'allocation/libération de mémoire.

Liaison

La liaison détermine si plusieurs déclaration de la même variable référencent ou non le même emplacement mémoire. Un identificateur peut être : - non lié : sa définition est indépendante de toute autre. C'est le cas des variables locales et des types définis par l'utilisateur comme des énumérations ou des classes s'ils ont été définis dans un bloc. - à liaison interne : l'emplacement mémoire accédé est le même partout dans le fichier où l'identificateur est déclaré. C'est le cas des variables gloables statiques, des fonctions statiques, des variables globales constantes et des fonctions(ou des types utilisateur) déclarés dans un espace de nommage anonyme. - à liaison externe : l'emplacement mémoire peut être accédé partout dans le fichier ou dans un autre fichier (avec une déclaration forward).

Les fonctions sont par défaut à liaison externe (sauf si elles sont définies avec le mot clé static).

Spécificateurs de classes de stockage

Ils définissent la durée et la liaison d'une variable. C++ supporte les spécificateurs suivants :

  • extern
  • static
  • thread_local (C++11)
  • mutable
  • auto (déprécié en C++11)
  • register (déprécié en C++17)