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-specifiers
opt attribute-seq
opt declarator
declaration-list
opt compound-statement
/* attribute-seq
est spécifique à Microsoft */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
opt
type-specifier
declaration-specifiers
opt
type-qualifier
declaration-specifiers
opt
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