Sunteți pe pagina 1din 4

CLASES DE ALMACENAMIENTO EN C:

La "clase de almacenamiento" de una variable determina si el elemento tiene una


duracin "global" o "local". C llama a estas dos duraciones "static" y "automatic".
Un elemento con una duracin global existe y tiene un valor a lo largo de la
ejecucin del programa. Todas las funciones tienen duraciones globales.
A las variables automticas, o a las variables con duraciones locales, se les asigna
un nuevo almacenamiento cada vez que el control de ejecucin pasa al bloque en
que estn definidas. Cuando la ejecucin realiza una devolucin, las variables
dejan de tener valores significativos.
C proporciona los especificadores de clase de almacenamiento siguientes:

auto
register
extern
static

Recordemos que el almacenamiento puede realizarse en cuatro sitios distintos: el
segmento
de datos, el registro, el montn o la pila. Recordemos tambin que puede
establecerse de
tres formas:
De forma explcita, mediante la sintaxis de la declaracin (utilizando alguno de
los
especificadores anteriores).
De forma implcita, por la situacin de la declaracin en el cdigo.
Por mezcla de ambas.

auto
La palabra clave auto sirve para definir las variables como locales. Estas variables
solo son conocidas en el bloque de cdigo en que se han definido (ni siquiera en
el resto de la funcin a la que pertenece el bloque en cuestin). Puesto que este
es el valor por defecto, la palabra reservada auto es opcional y muy raramente se
usa. Por esta razn a las variables locales se las suele denominar tambin como
automticas.
Pueden ser definidas en cualquier parte, pero por razones de legibilidad, es
costumbre declararlas al principio del bloque. Las variables locales se guardan en
la pila, solo se crean cuando son necesarias (se entra en el bloque); son tambin
dinmicas, por lo que se pierden sus valores al salir del bloque; si no se desea que
esto ocurra hay que recurrir a declararlas estticas. Esto es muy de tener en
cuenta en las llamadas a funciones.
Sintaxis:
auto <nombre_variable>;
register
La palabra clave register es un especificador de tipo de almacenamiento; se utiliza
para indicar al compilador que ciertas variables (normalmente del tipo int y char)
deben ser almacenadas en los registros del procesador en lugar de la pila. Son las
denominadas variables de registro. La razn de este "capricho" hay que buscarla
en la velocidad. Ocurre que los registros, aunque de poca capacidad y en nmero
limitado, corresponden a zonas de almacenamiento de los procesadores cuyo
acceso es excepcionalmente rpido.
Este especificador de almacenamiento solo puede aplicarse a variables
automticas y a parmetros de funciones (por consiguiente no pueden ser
globales o estticas). De hecho, cuando el especificador register se aplica a la
declaracin de variables (por ejemplo, int, char, float), tambin implica duracin
automtica.
El tipo y nmero de variables de registro que pueden usarse es dependiente de la
implementacin. Normalmente se utiliza para aumentar la velocidad de ejecucin
en determinadas zonas de cdigo (en controles de bucle por ejemplo). El
compilador puede ignorarlas completamente o ignorar las que sobrepasen el
mximo permitido.

Sintaxis:
register <nombre_variable>;

extern
Permite que ciertas variables puedan ser globales a varias unidades de
compilacin. Para esto, las variables se definen en el espacio global de uno de los
ficheros, generalmente main y despus se declaran como externas al comienzo de
los dems mdulos (generalmente dentro de ficheros de cabecera).
Sintaxis:
extern <nombre_variable>;
static
La caracterstica de las variables automticas de perder su valor al salir del bloque
en que han sido definidas, es un serio inconveniente en algunas ocasiones. Para
resolver el problema se inventaron las variables estticas, un tipo especial de
variable que no fuese destruida cuando la ejecucin saliese de su mbito y que
conservase su valor. Este nuevo tipo se declara mediante el especificador de tipo
de almacenamiento static, con lo que se previene que una variable pierda su valor
cuando se sale del bloque en que se ha definido.
Por ejemplo, entre llamadas sucesivas a una funcin. Sin embargo, como veremos
a continuacin, static puede aplicarse tanto a variables como a funciones e incluso
a miembros de clases.
Sintaxis:
Se puede declarar como variable local
Ejem:
static <nombre_variable>;
int func (int n, int b = 0) {
static int suma = 0;
if (!n ) return suma;
return (suma += b);
}
Se puede declarar como variable global
Ejem:
static int x = 10;
static void func () { /* .... */ }


bibliografia
navegador google
http://msdn.microsoft.com/es-es/library/w9hwbe3d.aspx
http://www.mailxmail.com/curso-informatica-funciones-c/funciones-c-ambitos-
clases-almacenamiento-variables-locales

S-ar putea să vă placă și