En algunos lenguajes de programación como C (y sus descendientes cercanos como C ++ , Objective-C y Java ), static
es una palabra reservada que controla tanto la vida útil (como una variable estática ) como la visibilidad (dependiendo del enlace ). El efecto de la palabra clave varía según los detalles del lenguaje de programación específico.
Comportamiento común de C / C ++
En C y C ++, el efecto de la static
palabra clave en C depende de dónde ocurra la declaración.
static
puede actuar como una clase de almacenamiento (que no debe confundirse con las clases en la programación orientada a objetos ), como puede extern
, auto
y register
(que también son palabras reservadas). Cada variable y función tiene una de estas clases de almacenamiento; si una declaración no especifica la clase de almacenamiento, se usa un valor predeterminado dependiente del contexto:
extern
para todas las declaraciones de nivel superior en un archivo fuente,auto
para variables declaradas en cuerpos de funciones.
Clase de almacenamiento | Toda la vida | Visibilidad |
---|---|---|
extern | ejecución del programa | externo (programa completo) |
static | ejecución del programa | interno ( solo unidad de traducción ) |
auto , register | ejecución de la función | (ninguno) |
En estos lenguajes, el término "variable estática" tiene dos significados que son fáciles de confundir:
- Una variable con la misma vida útil que el programa, como se describe anteriormente (independiente del idioma); o
- (Específico de la familia C) Una variable declarada con clase de almacenamiento
static
.
Las variables con clase de almacenamiento extern
, que incluyen variables declaradas en el nivel superior sin una clase de almacenamiento explícita, están static
en el primer significado pero no en el segundo.
Variable global estática
Una variable declarada como static
en el nivel superior de un archivo de origen (fuera de cualquier definición de función) solo es visible en ese archivo (" alcance de archivo ", también conocido como " enlace interno "). En este uso, la palabra clave static
se conoce como " especificador de acceso ".
Función estática
De manera similar, una función estática, una función declarada como static
en el nivel superior de un archivo de origen (fuera de cualquier definición de clase), solo es visible en ese archivo (" alcance de archivo ", también conocido como " enlace interno ").
Variables locales estáticas
Las variables declaradas como static
dentro de una función se asignan estáticamente, por lo que mantienen su ubicación en la memoria durante toda la ejecución del programa, mientras que tienen el mismo alcance de visibilidad que las variables locales automáticas ( auto
y register
), lo que significa que permanecen locales a la función. Por lo tanto, cualquier valor que la función ponga en sus variables locales estáticas durante una llamada seguirá estando presente cuando se vuelva a llamar a la función.
Específico de C ++
Variables de miembros estáticos
En C ++ , las variables miembro declaradas como static
definiciones de clase internas son variables de clase (compartidas entre todas las instancias de clase, a diferencia de las variables de instancia ).
Método estático
De manera similar, un método estático , un método declarado como static
dentro de una definición de clase, está destinado a ser relevante para todas las instancias de una clase en lugar de cualquier instancia específica. Un método declarado como static
se puede llamar sin instanciar la clase.