Classe de stockage

Dans une définition de fonction, le spécificateur de classe de stockage attribue à la fonction la classe de stockage extern ou static.

Syntaxe

function-definition:
declaration-specifiersopt attribute-seqopt declarator declaration-listopt compound-statement

/* attribute-seq est spécifique à Microsoft */

declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt

storage-class-specifier : /* Pour les définitions de fonction */
extern
static

Si une définition de fonction n’inclut pas de storage-class-specifier, par défaut, la classe de stockage est extern. Vous pouvez déclarer explicitement une fonction en tant que extern, mais ce n’est pas obligatoire.

Si la déclaration d’une fonction contient le storage-class-specifier extern, l’identificateur a la même liaison que n’importe quelle déclaration visible de l’identificateur avec une étendue de fichier. S’il n’existe aucune déclaration visible avec une portée de fichier, l’identificateur a une liaison externe. Si un identificateur a une portée de fichier et pas de storage-class-specifier, l’identificateur a une liaison externe. La liaison externe signifie que chaque instance de l'identificateur identifie le même objet ou la même fonction. Pour plus d’informations sur la liaison et la portée de fichier, consultez Durée de vie, portée, visibilité et liaison.

Les déclarations de fonction dans la portée du bloc avec un spécificateur de classe de stockage autre que extern génèrent des erreurs.

Une fonction avec la classe de stockage static est uniquement visible dans le fichier source dans lequel elle est définie. Toutes les autres fonctions, que la classe de stockage extern leur soit attribuée explicitement ou implicitement, sont visibles dans tous les fichiers source du programme. Si la classe de stockage static est voulue, elle doit être déclarée dans la première occurrence d’une déclaration (le cas échéant) de la fonction et dans la définition de la fonction.

Section spécifique à Microsoft

Lorsque les extensions Microsoft sont activées, une fonction initialement déclarée sans classe de stockage (ou avec la classe de stockage extern) reçoit la classe de stockage static si la définition de fonction se trouve dans le même fichier source et que cette définition indique explicitement la classe de stockage static.

Lors de la compilation avec l’option de compilateur /Ze, les fonctions déclarées dans un bloc à l’aide du mot clé extern ont une visibilité globale, ce qui n’est pas vrai en cas de compilation avec /Za. Cette fonctionnalité ne peut pas être considérée comme adaptée si la portabilité du code source est prise en compte.

FIN de la section spécifique à Microsoft

Voir aussi

Définitions de fonction C