static

Descripción

La forma de ocultar la información en un fichero fuente se realiza por medio del modificador static. Las variables y funciones con el modificador static no pueden ser accedidas directamente desde otro módulo. Las variables definidas dentro de las funciones como static tienen una existencia igual a las globales, pero sólo accesibles desde la función.

Nota: si una variable es estática no quiere decir que no sea modificable.

Variable estática de fichero

Definición

Son todas aquellas variables definidas fuera de cualquier función y precedidas de la palabra clave static. En cuanto al ámbito también es aplicable a funciones definidas como static.

Ámbito

Accesible directamente sólo desde las funciones definidas en su mismo fichero.

Existencia

La misma que el programa.

Variable estática de función

Definición

Son todas aquellas variables definidas dentro de una función y precedidas de la palabra clave static.

Ámbito

Accesible solamente desde la función dentro de la que se define, sólo existe una copia para todos los ámbitos de las posibles llamadas recursivas.

Existencia

La misma que el programa, no pierde su valor de llamada en llamada.


Para más información examine la ayuda sobre los tipos de variables en C según el tiempo de existencia y ámbito de acceso.

Función estática de fichero

Definición

Son todas aquellas funciones precedidas de la palabra clave static.

Ámbito

Accesible directamente sólo desde las funciones definidas en su mismo fichero.

Ejemplo

static int localFichero=0;           /* Estática de fichero, puede ser accedida sólo por las funciones del fichero */
static int multiploOpuesto(int * a){ /* Función estática de fichero, accesible sólo para las funciones definidas en su mismo fichero */
   int i=-1;                         /* Local a la función, se inicializa cada vez que se invoca a f */
   static int numLlamadas=0;         /* Estática de función, su valor no se pierde en cada ejecución */
   localFichero++; 
   *a=(*a)*localFichero*i;
   return ++numLlamadas;
}