Classes de stockage C
La « classe de stockage » d'une variable détermine si l'élément a une durée de vie « globale » ou « locale ». C appelle ces deux durées de vie « statique » et « automatique ». Un élément avec une durée de vie globale existe et a une valeur tout au long de l’exécution du programme. Toutes les fonctions ont des durées de vie globales.
Un nouveau stockage est alloué aux variables automatiques ou à celles avec des durées de vie locales chaque fois que le contrôle d’exécution passe au bloc dans lequel elles sont définies. Lorsque l'exécution est retournée, les variables n'ont plus de valeurs significatives.
C fournit les spécificateurs de classe de stockage suivants :
Syntaxe
storage-class-specifier
:
auto
register
static
extern
typedef
__declspec (
extended-decl-modifier-seq
)
/* Microsoft-specific */
Sauf pour __declspec
, vous ne pouvez utiliser qu’un seul storage-class-specifier
dans le declaration-specifier
d’une déclaration. Si aucune spécification classe-stockage n'est donnée, les déclarations dans un bloc créent des objets automatiques.
Les éléments déclarés avec le spécificateur auto
ou register
ont des durées de vie locales. Les éléments déclarés avec le spécificateur static
ou extern
ont des durées de vie globales.
Puisque typedef
et __declspec
sont sémantiquement différents des quatre autres éléments terminaux storage-class-specifier
, ils sont traités séparément. Pour des informations spécifiques sur typedef
, consultez Déclarations typedef
. Pour des informations spécifiques sur __declspec
, consultez Attributs étendus de classe de stockage.
Le positionnement des déclarations de variables et des fonctions dans des fichiers sources affecte également la classe de stockage et la visibilité. Les déclarations en dehors de toutes les définitions de fonction doivent apparaître au « niveau externe ». Les déclarations au sein des définitions de fonction apparaissent au « niveau interne ».
La signification exacte de chaque spécificateur de classe de stockage dépend de deux facteurs :
Si la déclaration apparaît au niveau externe ou interne
Si l'élément déclaré est une variable ou une fonction
Les spécificateurs de classe de stockage des déclarations au niveau externe et Spécificateurs de classe de stockage des déclarations au niveau interne décrivent les éléments terminaux storage-class-specifier
dans chaque type de déclaration et expliquent le comportement par défaut lorsque le storage-class-specifier
est omis dans une variable. La rubrique Spécificateurs de classe de stockage avec des déclarations de fonction décrit les spécificateurs de classe de stockage utilisés avec les fonctions.