Previous Contents Next

11   Portée, visibilité, durée de vie

La portée d'un identificateur (correspondant à un nom de variable, de fonction,...) correspond aux parties du programme où cet identificateur peut être utilisé sans provoquer d'erreur à la compilation.

La portée d'une variable globale ou d'une fonction globale est égale au programme: elles peuvent être utilisée n'importe où. Un identificateur correspondant à une variable locale peut être utilisé à partir de sa définition jusqu'à la fin de la première instruction composée ({...}) qui contient sa définition.

Deux variables peuvent avoir le même nom mais dans ce cas, elle doivent avoir deux portés différentes. Par exemple, on peut évidemment utiliser une variable locale i dans deux fonctions différentes : dans ce cas, les portées des deux variables sont disjointes. Mais on peut aussi avoir la situation suivante :

//=========================
{ 
 int i=3;
  {
   int i=5;
   cout << i; // affiche 5
  }
cout << i; // affiche 3
}
//=========================
Ici les deux variables i ont bien des portées différentes : la portée de la seconde est incluse dans celle de la première. Lors du premier cout, seule la seconde variable (celle valant 5) est visible, la première existe toujours (elle occupe un espace mémoire) mais elle n'est pas accessible. Après le }, la seconde variable est détruite et il ne reste plus que la première variable valant 3. Une variable peut donc être ``à portée'' mais non visible.

La durée de vie d'une variable correspond à la période depuis sa création (allocation de mémoire) à sa destruction (libération de la zone mémoire correspondante). Cette notion coïncide avec la portée pour toutes les variables que nous avons évoquées jusqu'ici, mais ce n'est pas le cas pour les variables static et pour les celles correspondant à des structures de données dynamiques (i.e. dont la création n'a pas été effectuée avec l'opérateur new), ces deux cas seront présentés ultérieurement.


Previous Contents Next