Sé static
es una palabra clave sobrecargada en C. Aquí, solo estoy interesado en su uso como palabra clave para hacer cumplir la vinculación interna.Enlace interno con la palabra clave estática en C
Si tiene una variable global declarada en un archivo .c
, ¿cuál es la diferencia entre usar static
y no usar static
? De cualquier manera, ningún otro archivo .c
tiene acceso a la variable, por lo que la variable es básicamente "privada" para el archivo, con o sin la palabra clave estática.
Por ejemplo, si tengo un archivo foo.c
, y declarar una variable global:
int x = 5;
esa variable x
sólo está disponible para código dentro foo.c
(a menos que, por supuesto, que declaran que en algunos compartida archivo de encabezado con la palabra clave extern
). Pero si no lo declaro en un archivo de encabezado, ¿cuál sería la diferencia si tuviera que escribir:
static int x = 5
.
De cualquier manera, parece que x
tiene un enlace interno aquí. Así que estoy confundido en cuanto al propósito de static
en este sentido.
Casi respondiste tu propia pregunta: dijiste "si no lo declaro en un archivo de encabezado", lo que significa "si no escribo una declaración con la palabra clave 'extern'". El punto es que es * imposible * escribir tal declaración si has declarado que tu variable estática, mientras que si no lo has hecho, alguien más podría venir y hacerlo, enlazar con tu código y tener acceso a tu variable. (Además de lo que menciona Pascal Cuoq.) – Cascabel
posible duplicado de [¿Qué significa "estático" en un programa C?] (Http://stackoverflow.com/questions/572547/what-does-static-mean-in- ac-program). en particular, abordo ese caso en mi respuesta: http://stackoverflow.com/a/14339047/895245 –