Partager via


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.

Voir aussi

Déclarations et types