Entiendo lo que hace la estática, pero no por qué la utilizamos. ¿Es solo para mantener la capa de abstracción?¿Por qué declarar una variable o función estática en C?
Respuesta
Hay algunas razones para utilizar static
en C.
Cuando se utiliza con las funciones, si la intención es que la creación de la abstracción. El término original para el alcance de un archivo de código fuente C era "unidad de traducción". Las funciones estáticas solo se pueden alcanzar desde dentro de la misma unidad de traducción. Estas funciones estáticas son similares a los métodos privados en C++, liberalmente interpretados (en esa analogía, una unidad de traducción define una clase).
Los datos estáticos a nivel global tampoco son accesibles desde fuera de la unidad de traducción, y esto también se utiliza para crear una abstracción. Además, todos los datos estáticos se inicializan a cero, por lo que se puede usar static
para controlar la inicialización.
El nivel variable estático ("automático") local se utiliza para abstraer la implementación de la función que mantiene el estado entre llamadas, pero evita usar una variable al alcance de la unidad de traducción. De nuevo, las variables se inicializan a cero debido a la calificación estática.
La palabra clave static tiene varios usos; Fuera de una función, simplemente limita la visibilidad de una función o variable a la unidad de compilación (archivo .c) en la que aparece la función o variable. De esta forma, la función o variable no se convierte en global. Esto es algo bueno, promueve una especie de principio de "necesidad de saber" (no exponga las cosas que no necesitan ser expuestas). Las variables estáticas de este tipo se inicializan en cero, pero por supuesto las variables globales también se inicializan en cero, por lo que la palabra clave estática no es responsable de la inicialización cero per se.
Las variables también se pueden declarar estáticas dentro de una función. Esta característica significa que la variable no es automática, es decir, asignada y liberada en la pila con cada invocación de la función. En cambio, la variable se asigna en el área de datos estáticos, se inicializa a cero y persiste durante la vida del programa. Si la función lo modifica durante una invocación, el nuevo valor modificado estará disponible en la siguiente invocación. Esto suena como algo bueno, pero hay buenas razones por las cuales "automático" es el predeterminado, y las variables "estáticas" dentro de las funciones se deben usar con moderación. En pocas palabras, las variables automáticas son más eficientes en la memoria, y son esenciales si desea que su función sea segura para subprocesos.
static
se utiliza como storage class specifier y linkage specifier. Como especificador de vinculación, restringe el alcance de una variable o función que de otro modo sería global a una sola unidad de compilación. Esto permite, por ejemplo, una unidad de compilación tener variables y funciones con los mismos nombres de identificador que otras unidades de compilación, pero sin causar un choque, ya que tales identificadores están 'ocultos' del enlazador. Esto es útil si está creando una biblioteca, por ejemplo, y necesita funciones internas de 'ayuda' que no deben causar un conflicto con el código de usuario.
Como un especificador de clase de almacenamiento aplicado a una variable local, tiene una semántica diferente por completo, pero su pregunta parece implicar que se está refiriendo a la vinculación estática.
funciones estáticas en C
En C, las funciones son globales por defecto. La palabra clave "estática" antes de un nombre de función lo hace estático. Por ejemplo, debajo de fun fun() es estático.
static int fun(void)
{
printf("I am a static function ");
}
diferencia de las funciones globales en C, el acceso a funciones estáticas se limita al archivo en el que se declaran.Por lo tanto, cuando queremos restringir el acceso a las funciones, las hacemos estáticas. Otra razón para hacer que las funciones sean estáticas puede ser la reutilización del mismo nombre de función en otros archivos.
Por ejemplo, si Almacenamos siguiente programa en un archivo Archivo1.c
/* Inside file1.c */
static void fun1(void)
{
puts("fun1 called");
}
y tienda del siguiente programa en otro archivo Archivo2.c
/* Iinside file2.c */
int main(void)
{
fun1();
getchar();
return 0;
}
Ahora bien, si se compila el código anterior con el comando "gcc file2.c file1.c
", obtenemos el error "referencia indefinida a fun1’” . This is because fun1() is declared
estática" en file1.c y no se puede utilizar en file2.c. Vea también el explanation here, de donde provienen los códigos.
- 1. Cómo declarar una variable estática en Javascript
- 2. PHP: ¿por qué no pude declarar la variable const estática?
- 3. una variable estática en c
- 4. Declarar una función estática y luego no estática: ¿es estándar?
- 5. ¿Por qué retener una variable estática?
- 6. declarar variable en una función sql
- 7. ¿Por qué no podemos declarar una variable estática dentro de una estructura en el lenguaje de programación C?
- 8. variable estática global vs variable estática en la función?
- 9. ¿Por qué no hay una variable estática local en Java?
- 10. ¿Cuál es el uso de declarar una variable estática como extern dentro de una función?
- 11. motor de plantillas twig, usando una función estática o variable
- 12. Función miembro que devuelve una variable estática
- 13. Declarar una variable estática nivel de función dentro de un bloque if que nunca se golpeó
- 14. Variable global estática utilizada por la función miembro en línea
- 15. extern en una función estática en C++
- 16. función no estática frente a función estática y variable
- 17. ¿Por qué no puedes declarar una estructura estática en C#, pero pueden tener métodos estáticos?
- 18. Cómo declarar una variable estática pero no definirla
- 19. C++ variable estática
- 20. cómo declarar una función o método global usando C#?
- 21. ¿Declarar una función dentro de una función?
- 22. ¿Por qué no se vincula externamente a una variable estática?
- 23. C++ miembro función de acceso privado variable estática?
- 24. Función estática Ayuda C++
- 25. inicializando una variable estática en el encabezado
- 26. Variable estática en función establecida llamando a otra función
- 27. ¿Por qué no obtengo un error de compilación al declarar una matriz C con tamaño variable?
- 28. ¿Cómo declarar una variable dentro de una función de esquema?
- 29. variable estática final en Java
- 30. C# clase estática ¿por qué usar?
Duplicación de http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program –