Por defecto, todas las variables llevan asociada una clase de almacenamiento que determinan su accesibilidad y existencia. Estos conceptos de accesibilidad y existencia de las variables pueden alterarse por los calificadores:
- auto.- almacenamiento automático.
- register.- almacenamiento en un registro.
- static.- almacenamiento estático.
- extern.- almacenamiento externo.
Los calificadores auto y register solo se pueden usar con variables locales, el comando extern sólo se usa con variables globales y el calificador static puede ser utilizado con variables globales y variables locales.
Calificación de variables globales
Una variable declarada a nivel global es una definición de la variable o una referencia a una variable definida en otra parte. Las variables definidas a nivel global sin iniciadas a 0 por omisión.
Una variable global puede hacerse accesible antes de su definición o en otro fichero fuente, utilizando el calificador extern. Esto quiere decir que el calificador extern se utiliza para hacer visible una variable global allí donde no lo sea.
Este ejemplo lo forman dos ficheros fuente, uno.cpp y dos.cpp, que muestra con claridad lo dicho anteriormente.
Listado uno.cpp:
y el listado dos.cpp:
Compilamos los dos archivos con el nombre del ejecutable var y ejecutamos:
Vemos que el programa anterior esta formado por los ficheros fuente uno.cpp y dos.cpp:
1.-
2.-
3.-
Si omitiéramos la declaración extern, la variable global var no sería accesible en la función main.
4.-
Si la variable var no hubiera sido iniciada explícitamente, C++ le asignaría el valor de 0 por ser una variable global.
Si se utiliza el calificador static en la declaración de una variable a nivel global, ésta será accesible solamente dentro de su propio fichero fuente. Esto permite declarar otras variables con el mismo nombre en otros ficheros correspondientes al mismo programa. Como ejemplo sustituimos en el fichero dos.cpp del programa anterior, el calificador extern por static.
Vemos que en vez de mostrar 6, 7, 8:
Ahora mostrará distinto resultado, 6, 7, 1:
Esto demuestra que el calificador static restringe el acceso a la variable al propio fichero fuente.
Calificación de variables locales
Si declaramos una variable local como auto (variable automática) solo será visible dentro del bloque donde está devinida. Este tipo de variables no son iniciadas automáticamente, por lo que debemos iniciarlas explícitamente. Se recomienda iniciarlas siempre.
La variable local declarada static solamente es visible dentro del bloque donde está definida, pero a diferencia de auto, su existencia es permanente, en lugar de aparecer y desaparecer al iniciar y finalizar la ejecución del bloque que lo contiene.
Una variable declarada static es declarada solamente una vez, cuando se ejecuta el código que la define, y no es reiniciada cada vez que se ejecuta el bloque que la contiene, sino que la siguiente ejecución del bloque comienza con el valor que tenía la variable cuando finalizó la ejecución anterior. Si la variable no es iniciada explícitamente C++ la inicia automáticamente a 0.
Una variable declarada register es una recomendación al compilador para que almacene dicha variable, si es posible, en un registro de la máquina, lo que producirá programas más cortos y más rápidos. El número de registros utilizables para este tipo de variables depende de la máquina. Si no es posible almacenar una variable register en un registro, se le da el tratamiento de automática. En este tipo de declaración es válido para variables de tipo int y de tipo puntero, debido al tamaño del registro.
Una variable declarada extern a nivel local hace referencia a una variable definida con el mismo nombre a nivel global en cualquier parte del programa. La finalidad de extern en este caso es hacer accesible una variable global, en un bloque donde no lo es.
Veamos un ejemplo:
La salida sería:
Desglosemos el programa
La clase de almacenamiento de var3 es register y la de var4 es auto.
Debe estar conectado para enviar un comentario.