English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La clase de almacenamiento define variables en un programa C/El ámbito (visibilidad) y la vida útil de la función. Estos modificadores se colocan antes del tipo que los modifica. A continuación se muestra una lista de las clases de almacenamiento disponibles en un programa C:
auto
register
static
extern
auto La clase de almacenamiento es la clase de almacenamiento predeterminada para todas las variables locales.
{ int mount; auto int month; }
El ejemplo anterior define dos variables con la misma clase de almacenamiento, auto solo se puede usar dentro de una función, es decir, auto solo puede modificar variables locales.
register La clase de almacenamiento se utiliza para definir variables locales que se almacenan en el registro en lugar de en RAM. Esto significa que el tamaño máximo de la variable es igual al tamaño del registro (generalmente un word), y no se puede aplicar el operador unario '&' a la variable (porque no tiene una ubicación en memoria).
{ register int miles; }
El registro se utiliza solo para variables que necesitan acceso rápido, como contadores. También se debe tener en cuenta que definir 'register' no significa que la variable se almacenará en el registro, significa que la variable puede almacenarse en el registro, lo que depende de las limitaciones del hardware y la implementación.
static La clase de almacenamiento indica al compilador que mantenga la existencia de las variables locales durante todo el ciclo de vida del programa, sin necesidad de crear y destruir estas variables cada vez que entren y salgan de su ámbito. Por lo tanto, el uso del modificador static en variables locales permite mantener el valor de estas variables entre llamadas a la función.
El modificador static también puede aplicarse a variables globales. Cuando static se aplica a una variable global, limita el ámbito de la variable al archivo en el que se declara.
Una variable o método static declarada globalmente puede ser llamada por cualquier función o método siempre que estos métodos aparezcan en el mismo archivo que la variable o método static.
El siguiente ejemplo muestra la aplicación de la modificación static para variables globales y locales.
#include <stdio.h> /* declaración de función */ void func1(void); static int count = 12; /* variable global - static es el predeterminado */ int main() { while (count--) { func1(); } return 0; } void func1(void) { /* 'hello' es 'func1la variable local - se inicializa solo una vez * Cada vez que se llama a la función 'func1'El valor de 'hello' no se restablece. */ static int hello = 4; hello++; printf("%d, count es %d\n", hello, count); }
En el ejemplo, count como variable global se puede usar dentro de la función, hello se usa el modificador static, por lo que no se restablece en cada llamada.
Puede que aún no entienda este ejemplo, porque ya he utilizado funciones y variables globales, conceptos que hasta ahora no se han explicado. Aunque no lo entienda completamente, no importa, en los capítulos posteriores se explicarán en detalle. Cuando el código se compila y ejecuta, produce los siguientes resultados:
hello es 5 count es 11 hello es 6 count es 10 hello es 7 count es 9 hello es 8 count es 8 hello es 9 count es 7 hello es 10 count es 6 hello es 11 count es 5 hello es 12 count es 4 hello es 13 count es 3 hello es 14 count es 2 hello es 15 count es 1 hello es 16 count es 0
extern La clase de almacenamiento se utiliza para proporcionar una referencia a una variable global, que es visible para todos los archivos del programa. Al usar extern en el caso de variables que no se pueden inicializar, se apunta al nombre de la variable a una ubicación de almacenamiento previamente definida.
Cuando tiene varios archivos y ha definido una variable global o función que se puede usar en otros archivos, se puede usar extern Para obtener la referencia a una variable o función ya definida. Se puede entender de la siguiente manera:extern se utiliza para declarar una variable global o función en otro archivo.
El modificador extern se utiliza generalmente cuando hay dos o más archivos que comparten la misma variable global o función, como se muestra a continuación:
Primer archivo: main.c
#include <stdio.h> int count; extern void write_extern(); int main() { count = 5; write_extern(); }
Segundo archivo: support.c
#include <stdio.h> extern int count; void write_extern(void) { printf("count es %d\n", count); }
Aquí, el segundo archivo contiene extern La palabra clave se utiliza para declarar que ya se ha definido en el primer archivo main.c count。Ahora, compila estos archivos, como se muestra a continuación:
$ gcc main.c support.c
Esto producirá a.out El programa ejecutable, cuando se ejecuta, producirá los siguientes resultados:
count es 5