Next: Classes de mémoire
Up: Les déclarations
Previous: Les espaces de noms
Sous-sections
Du point de vue de la durée de vie, il existe trois types de variables :
les variables
statiques, les variables
automatiques et
les variables
dynamiques.
-
- Les variables statiques sont allouées au
début de l'exécution du programme, et ne sont libérées qu'à la fin
de l'exécution du programme.
-
- Les variables automatiques sont allouées à l'entrée
d'une instruction composée, et libérées lors de la sortie
de l'instruction composée.
-
- Les variables dynamiques sont allouées et libérées explicitement
par le programmeur, à l'aide des fonctions malloc et free.
Dans les langages de programmation, il y a généralement un lien étroit
entre la portée de la déclaration d'une variable et sa durée de vie.
Il est classique en effet, qu'une variable globale (c'est à dire dont
la déclaration se trouve à l'extérieur de toute fonction), soit une
variable statique, et qu'une variable locale à une procédure ou
fonction, soit une variable automatique.
Dans le langage C, le programmeur a davantage de liberté.
Les variables globales sont ici aussi des variables statiques, mais
les variables locales peuvent être au choix du programmeur statiques ou
automatiques.
Si la déclaration d'une variable locale est précédée du mot clé
static, cette variable sera statique, si elle est précédée du
mot-clé auto, elle sera automatique, et en l'absence de l'un et
l'autre de ces mots-clés, elle sera prise par défaut de type automatique.
Cette liberté de donner à une variable locale une durée de vie
égale à celle du programme, permet de résoudre des problèmes du type
exposé ci-dessous.
Imaginons une procédure qui pour une raison quelconque doit connaître
combien de fois elle a été appelée.
Le programmeur a besoin d'une variable dont la durée de vie
est supérieure à celle de la procédure concernée, ce sera donc
une variable statique.
Cependant cette variable doit être une variable privée de la procédure,
(il n'y a aucune raison qu'une autre procédure puisse en modifier la
valeur), il faut donc que ce soit une variable locale à la procédure.
En C, on programmera de la manière suivante :
void proc()
{
static int nb_appel = 0;
nb_appel++;
...
}
Dans d'autres langages, de manière à satisfaire les contraintes de durée
de vie, on aurait été obligé de faire de la variable
nb_appel
,
une variable globale, la rendant ainsi accessible aux autres procédures,
ce qui est tout à fait illogique.
Next: Classes de mémoire
Up: Les déclarations
Previous: Les espaces de noms
Bernard Cassagne
1998-12-09