Je sais que static
est un mot-clé surchargé en C. Ici, je ne m'intéresse qu'à son utilisation en tant que mot-clé pour imposer le couplage interne.Liaison interne avec mot-clé statique en C
Si vous avez une variable globale déclarée dans un fichier .c
, quelle est la différence entre utiliser static
et ne pas utiliser static
? De toute façon, aucun autre fichier .c
n'a accès à la variable, donc la variable est fondamentalement "privée" dans le fichier, avec ou sans le mot-clé static.
Par exemple, si j'ai un fichier foo.c
, et je déclare une variable globale:
int x = 5;
Cette variable x
est uniquement disponible à code à l'intérieur foo.c
(à moins bien sûr que je déclare dans une commune fichier d'en-tête avec le mot-clé extern
). Mais si je ne le déclare pas dans un fichier d'en-tête, quelle serait la différence si je devais taper:
static int x = 5
.
De toute façon, il semble que x
a une liaison interne ici. Donc, je suis confus quant à l'objectif de static
à cet égard.
Vous avez presque répondu à votre propre question - vous avez dit "si je ne le déclare pas dans un fichier d'en-tête", ce qui signifie "si je n'écris pas une déclaration avec le mot clé extern". Le fait est qu'il est * impossible * d'écrire une telle déclaration si vous avez déclaré votre variable statique, alors que si ce n'est pas le cas, quelqu'un d'autre pourrait venir le faire, lier avec votre code et avoir accès à votre variable. (En plus de ce que mentionne Pascal Cuoq.) – Cascabel
duplication possible de [Que signifie "statique" dans un programme C?] (Http://stackoverflow.com/questions/572547/what-does-static-mean-in- ac-programme). en particulier, j'aborde ce cas dans ma réponse: http://stackoverflow.com/a/14339047/895245 –