¿Qué son las variables automáticas y las variables de registro en lenguaje C?
Almacenamiento de variables en el aprendizaje del lenguaje C
La descripción de variables en lenguaje C incluye dos aspectos: tipo de variable y tipo de almacenamiento de variables. Los tipos de variables como int (entero) y char (carácter) se utilizan para indicar el tamaño del espacio de memoria ocupado por la variable. El tipo de almacenamiento de variables se utiliza para describir el alcance de la variable.
Las clases de almacenamiento de variables del lenguaje C incluyen: clase automática, clase de registro, clase estática y clase externa.
La palabra clave auto se agrega antes del nombre de la variable y su tipo para indicar que es una variable automática. Las variables locales se refieren a variables declaradas dentro de una función (a veces también llamadas variables automáticas). Utilice la palabra clave auto para ilustrar. Cuando se omite auto, todas las variables no globales se consideran variables locales, por lo que auto nunca se utiliza. Las variables locales se generan automáticamente cuando se llama a la función, pero no se inicializan automáticamente. Cuando finaliza la llamada a la función, esta variable desaparecerá automáticamente la próxima vez que se llame a esta función, se asignará nuevamente y. Desaparecerá automáticamente al salir.
estática se llama variable estática. Según el tipo de variables, se pueden dividir en variables locales estáticas y variables globales estáticas.
1. Variable local estática
La diferencia con las variables locales es que cuando la función sale, esta variable siempre existe, pero no puede ser utilizada por otras funciones
, al ingresar nuevamente a esta función, se guardará el último resultado. Otros son iguales que las variables locales.
2. Variables globales estáticas
Las variables globales estáticas se refieren a variables que solo son visibles en el archivo fuente en el que están definidas pero no en otros archivos fuente. La diferencia entre esta y las variables globales es que las variables globales pueden declararse como variables externas (externas) y ser utilizadas por otros archivos fuente, mientras que las variables globales estáticas ya no pueden declararse como externas, es decir, Solo puede ser utilizado por Se utiliza el archivo fuente donde se encuentra.
extern se llama variable externa. Para que la variable esté disponible no solo en el archivo fuente en el que está definida, sino también en otros archivos. Por lo tanto, se debe notificar a cada archivo de módulo de programa las variables completas y se puede utilizar extern para indicarlo.
La variable de registro se puede utilizar cuando la velocidad de ejecución es importante. La idea es decirle al compilador que coloque la variable en un registro de la CPU. Debido a que los datos se manipulan más rápido en los registros que en la memoria, esto aumenta la velocidad de ejecución del código del programa. La descripción de una variable de registro consiste en agregar la palabra clave registro antes del nombre y tipo de la variable. Vale la pena señalar que el operador de dirección amp; no puede actuar sobre las variables de registro.
archivo1.c
#include lt;stdlib.hgt;
#include lt;stdio.hgt;
int reset(
int siguiente();
int último();
int suma(int
int i=1); ;
void main()
{
auto int i,j;
i=reset();
for(j=1;jlt;=3;j)
{
printf("i=d\tj=d\n",i,j);
printf("siguiente(i)=d\n", siguiente());
printf("último(i)=d\n", último());
printf("suma(i j)=d\n", suma(i j))
}
}
archivo2 Archivo .c
static int i=10;
int next()
{
return(i =1);
}
int last()
{
return(i-=1);
}
int suma(int i)
{
static int j=5;
return(i=j =i);
}
archivo3.c
extern int i;
reset()
{
return(i);
}
Resultado de la ejecución:
i=1 j=1
siguiente(i )=11
último(i)=10
suma(i j)=7
i=1 j=2
siguiente (i)=11
último(i)=10
suma(i j)=10
i=1 j=3
next(i)=11
last(i)=10
sum(i j)=14
Un análisis detallado de las variables en los tres archivos tipo.
Declare i como una variable externa al comienzo de file1.c y muéstrelo como 1. Dentro de la función main se describen dos variables automáticas i y j, de modo que la i que aparece dentro de main es una variable automática. Al comienzo de file3.c, se indica que i es externo, lo que indica que es la misma variable que i definí en file1.c, por lo que el valor restablecido devuelve el valor actual de i, 1. El archivo file2.c definió la variable i al principio y la declaró como una variable estática, por lo que su alcance de uso solo se usa en el archivo actual. Sin embargo, a juzgar por la definición de función suma, el i utilizado internamente es un parámetro formal y j es una variable estática interna. Son diferentes de los i y j anteriores.
El proceso de ejecución específico se analiza de la siguiente manera:
Primero, el programa se compila y se declara como un archivo ejecutable. Después de ejecutar el archivo ejecutable, la función ingresa desde el cuerpo de la función principal. , y i se obtiene durante el proceso de inicialización. Es una variable global con un valor inicial de 1.
Después de ingresar a la función principal, primero llame a la función reset () e ingrese el archivo file3.c. El archivo file3.c declara i como una variable externa, por lo que el valor de i en este momento es 1 y el valor devuelto es 1. . Después de ejecutar la función reset(), regresa a la función principal y continúa ejecutando el programa en el cuerpo del bucle. El cuerpo del bucle primero llama a la función next (). El programa ingresa al archivo file2.c y determina que i es una variable estática, por lo que el valor de i en este momento es 10. Después de ejecutar next (), el valor de i es. 11, el valor de retorno es 11 y 11 es el valor de i. Cuando se llama a la función last(), se considera que el valor de i es 11. Después de ejecutar la función, el valor de i se convierte en 10 y 10 se utiliza como valor de i. Finalmente se ejecuta la función suma(i). Lo importante del valor en este momento es que los parámetros formales se pasan al ejecutar el programa, es decir, el valor real calculado cuando la primera llamada es suma(i j=2). Entonces, después de llamar a la función suma (i), el resultado de la ejecución es i = 5 2 = 7, que es el resultado de la ejecución. Por analogía, son 7, 10 y 14 respectivamente.
A través del programa anterior, podemos comprender que los diferentes tipos de almacenamiento tienen diferentes alcances. Cómo utilizar de manera flexible varios tipos de almacenamiento en la programación puede hacer que el programa sea más flexible.