Extrait du cours le langage C++ les structures de contrôle
3.2. Les classes de stockage
Les variables C/C++ peuvent être créées de différentes manières. Il est courant, selon la manière dont elles sont créées et la manière dont elles pourront être utilisées, de les classer en différentes catégories de variables. Les différents aspects que peuvent prendre les variables constituent ce que l’on appelle leur classe de stockage.
La classification la plus simple que l’on puisse faire des variables est la classification locale – globale.
Les variables globales sont déclarées en dehors de tout bloc d’instructions, dans la zone de déclaration globale du programme. Les variables locales en revanche sont créées à l’intérieur d’un bloc d’instructions. Les variables locales et globales ont des durées de vie, des portées et des emplacements en mémoire différents.
La portée d’une variable est la zone du programme dans laquelle elle est accessible. La portée des variables globales est tout le programme, alors que la portée des variables locales est le bloc d’instructions dans lequel elles ont été créées.
La durée de vie d’une variable est le temps pendant lequel elle existe. Les variables globales sont créées au début du programme et détruites à la fin, leur durée de vie est donc celle du programme. En général, les variables locales ont une durée de vie qui va du moment où elles sont déclarées jusqu’à la sortie du bloc d’instructions dans lequel elles ont été déclarées. Cependant, il est possible de faire en sorte que les variables locales survivent à la sortie de ce bloc d’instructions. D’autre part, la portée d’une variable peut commencer avant sa durée de vie si cette variable est déclarée après le début du bloc d’instructions dans lequel elle est déclarée. La durée de vie n’est donc pas égale à la portée d’une variable.
La classe de stockage d’une variable permet de spécifier sa durée de vie et sa place en mémoire (sa portée est toujours le bloc dans lequel la variable est déclarée). Le C/C++ dispose d’un éventail de classes de stockage assez large et permet de spécifier le type de variable que l’on désire utiliser :
• auto : la classe de stockage par défaut. Les variables ont pour portée le bloc d’instructions dans lequel elles ont été crées. Elles ne sont accessibles que dans ce bloc. Leur durée de vie est restreinte à ce bloc. Ce mot clé est facultatif, la classe de stockage auto étant la classe par défaut ;
• static : cette classe de stockage permet de créer des variables dont la portée est le bloc d’instructions en cours, mais qui, contrairement aux variables auto, ne sont pas détruites lors de la sortie de ce bloc. À chaque fois que l’on rentre dans ce bloc d’instructions, les variables statiques existeront et auront pour valeurs celles qu’elles avaient avant que l’on quitte ce bloc.
Leur durée de vie est donc celle du programme, et elles conservent leurs valeurs. Un fichier peut être considéré comme un bloc. Ainsi, une variable statique d’un fichier ne peut pas être accédée à partir d’un autre fichier. Cela est utile en compilation séparée (voir plus loin) ;
• register : cette classe de stockage permet de créer une variable dont l’emplacement se trouve dans un registre du microprocesseur. Il faut bien connaître le langage machine pour correctement utiliser cette classe de variable. En pratique, cette classe est très peu utilisée ;
• volatile : cette classe de variable sert lors de la programmation système. Elle indique qu’une variable peut être modifiée en arrière-plan par un autre programme (par exemple par une interruption, par un thread, par un autre processus, par le système d’exploitation ou par un autre processeur dans une machine parallèle). Cela nécessite donc de recharger cette variable à chaque fois qu’on y fait référence dans un registre du processeur, et ce même si elle se trouve déjà dans un de ces registres (ce qui peut arriver si on a demandé au compilateur d’optimiser le programme) ;
• extern : cette classe est utilisée pour signaler que la variable peut être définie dans un autre fichier.
Elle est utilisée dans le cadre de la compilation séparée (voir le Chapitre 6 pour plus de détails).
…..
Cours langage C++ Les fonctions et les structures de contrôle (2,80 MO) (Cours PDF)