Compartir a través de


Clases de almacenamiento de C

La "clase de almacenamiento" de una variable determina si el elemento tiene una duración "global" o "local". C llama a estas dos duraciones "estáticas" y "automáticas". Existe un elemento con una duración global y tiene un valor durante la ejecución del programa. Todas las funciones tienen duraciones globales.

A 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.

C proporciona los especificadores de clase de almacenamiento siguientes:

Sintaxis

storage-class-specifier:
auto
register
static
extern
typedef
__declspec ( extended-decl-modifier-seq ) /* Específico de Microsoft */

A excepción de __declspec, solo puede utilizar un storage-class-specifier en declaration-specifier en una declaración. Si no se crea ninguna especificación de clase de almacenamiento, las declaraciones dentro de un bloque crean objetos automáticos.

Los elementos declarados con el especificador auto o register tienen duraciones locales. Los elementos declarados con el especificador static o extern tienen duraciones globales.

Como typedef y __declspec son semánticamente diferentes de los otros cuatro elementos terminales storage-class-specifier, se tratan por separado. Para obtener información específica sobre typedef, vea Declaraciones typedef. Para obtener información específica sobre __declspec, vea Atributos extendidos de clase de almacenamiento.

La colocación de declaraciones de variable y de función dentro de los archivos de código fuente también afecta a la visibilidad y la clase de almacenamiento. Se dice que las declaraciones fuera de todas las definiciones de función aparecen en el "nivel externo". Las declaraciones dentro de las definiciones de función aparecen en el "nivel interno".

El significado exacto de cada especificador de clase de almacenamiento depende de dos factores:

  • Que la declaración aparezca en el nivel externo o interno

  • Que el elemento que se va a declarar sea una variable o una función

En Especificadores de clase de almacenamiento para declaraciones de nivel externo y Especificadores de clase de almacenamiento para declaraciones de nivel interno, se describen los elementos terminales storage-class-specifier de cada clase de declaración y se explica el comportamiento predeterminado cuando se omite el elemento storage-class-specifier de una variable. En Especificadores de clase de almacenamiento con declaraciones de función se describen los especificadores de clase de almacenamiento utilizados con funciones.

Vea también

Declaraciones y tipos