Duplicata possible:
Que signifie "statique" dans un programme C?
Que signifie le mot clé static
en C?
J'utilise ANSI-C. J'ai vu dans plusieurs exemples de code, ils utilisent le mot clé static
devant des variables et devant des fonctions. Quel est le but en cas d'utilisation avec une variable? Et quel est le but en cas d'utilisation avec une fonction?
Pour résumer, il existe deux utilisations du mot clé static
lors de la définition des variables:
1- Les variables définies dans la portée du fichier avec le mot clé static
, c'est-à-dire les fonctions externes définies ne seront visibles que dans ce fichier. Toute tentative d'y accéder à partir d'autres fichiers entraînera un symbole non résolu au moment du lien.
2- Les variables définies comme static
à l'intérieur d'un bloc dans une fonction persisteront ou "survivront" à travers différentes invocations du même bloc de code. S'ils sont définis initialisés, ils ne sont initialisés qu'une seule fois. static
les variables sont généralement garanties d'être initialisées à 0
par défaut.
static
dans le corps d'une fonction, c'est-à-dire utilisé comme classificateur de stockage de variable, cette variable conserve sa valeur entre les appels de fonction - on pourrait bien dire qu'une variable statique au sein d'une fonction est une variable globale visible uniquement pour cela une fonction. Cette utilisation de static
rend toujours la fonction utilisée dans le thread nsafe vous devez l'éviter.
L'autre cas d'utilisation utilise static
sur la portée globale, c'est-à-dire pour les variables et fonctions globales: les fonctions statiques et la variable globale sont locales à l'unité de compilation, c'est-à-dire qu'elles n'apparaissent pas dans la table d'exportation de la compilation objet binaire. Ils ne polluent donc pas l'espace de noms. Déclarer statique toutes les fonctions et variables globales non accessibles depuis l'extérieur de l'unité de compilation (c'est-à-dire le fichier C) en question est une bonne idée! Sachez simplement que les variables statiques ne doivent pas être placées dans les fichiers d'en-tête (sauf dans de très rares cas spéciaux).