La "clase de almacenamiento" de una variable determina si el elemento tiene una duración "global" o "local". C llama a estas dos duraciones "static" y "automatic".
Enviado por Lauvanbuuren97 • 3 de Noviembre de 2016 • Ensayo • 581 Palabras (3 Páginas) • 299 Visitas
- DEFINICIÓN
Clases de almacenamiento:
La "clase de almacenamiento" de una variable determina si el elemento tiene una duración "global" o "local". C llama a estas dos duraciones "static" y "automatic". Un elemento con una duración global existe y tiene un valor a lo largo de la ejecución del programa. Todas las funciones tienen duraciones globales.
Las variables automáticas, o a las variables con duraciones locales, se les asigna un nuevo almacenamiento cada vez que el control de ejecución pasa al bloque en que están definidas. Cuando la ejecución realiza una devolución, las variables dejan de tener valores significativos.
Características | Variable automática | Variable registro | Variable estática | Variable externa | |
1 | Palabra clave usada | auto | register | static | extern |
2 | Almacenamiento | Memoria | Registros de CPU | Memoria | Memoria |
3 | Valor inicial predeterminado | Valor de basura | Valor de basura | Valor cero | Valor cero |
4 | Alcance | Local para el bloque en el que se define la variable | Local para el bloque en el que se define la variable | Local para el bloque en el que se define la variable | Global |
5 | Duración | Hasta que los restos de control dentro del bloque en el que se define la variable | Hasta que los restos de control dentro del bloque en el que se define la variable | Valor de la variable persiste entre diferentes llamadas a funciones | Mientras la ejecución del programa no llega a su fin |
6 | Uso | Uso general. Más ampliamente utilizado en comparación con otras clases de almacenamiento. | Se utiliza ampliamente en contadores de bucles. | Se utiliza ampliamente para las funciones recursivas. | Se utiliza en el caso de variables que están siendo utilizados por casi todas las funciones en un programa. |
[pic 1]
Las reglas relativas a static incluyen:
- Las variables declaradas fuera de todos los bloques sin la palabra clave static conservan siempre sus valores en el programa.
- Para restringir el acceso a una unidad de traducción determinada, debe utilizar la palabra clave static .Esto le otorga “vinculación interna”. Para hacerlas globales para todo un programa, omita la clase de almacenamiento explícita o use la palabra clave extern (vea las reglas en la lista siguiente) .Esto le otorga “vinculación externa”. La vinculación interna y externa también se explican en Vinculación.
- Puede definir una variable en el nivel externo una única vez dentro de un programa.
- Puede definir otra variable con el mismo nombre y el especificador de clase de almacenamiento static en una unidad de traducción diferente.
- Puesto que cada definición static solo es visible dentro de su propia unidad de traducción, no se produce ningún conflicto.
- Esto proporciona una manera útil de ocultar nombres de identificación que se deban compartir entre funciones de una única unidad de traducción, pero que no deban ser visibles para otras unidades de traducción.
- El especificador de clase de almacenamiento static se puede aplicar también a funciones.
- Si se declara una función static, su nombre es invisible fuera del archivo en el que se
[pic 2]
Las reglas para usar extern son:
- El especificador de clase de almacenamiento extern declara una referencia a una variable definida en otro lugar.
- Puede usar una declaración extern para crear una definición en otro archivo de código fuente visible o para hacer que una variable sea visible antes de su definición en el mismo archivo de código fuente.
- Una vez que se ha declarado una referencia a la variable en el nivel externo, la variable está visible en el resto de la unidad de traducción en la que aparece la referencia declarada.
- Para que una referencia extern sea válida, la variable a la que hace referencia debe definirse una vez y solo una vez en el nivel externo.
- Esta definición (sin la clase de almacenamiento extern) puede estar en cualquier unidad de traducción de las que componen el programa.
[pic 3]
[pic 4]
...