Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Entendiendo las clases de almacenamiento en C: Alcance, vida útil y uso

Una clase de almacenamiento define el alcance (visibilidad) y tiempo de vida de variables y/o funciones dentro de un programa C. Anteceden al tipo que modifican. Tenemos cuatro clases de almacenamiento en C:

La clase de almacenamiento auto

auto es la clase por defecto para todas las variables locales.

{ int mount; auto int month; }

El ejemplo define dos variables en la misma clase. auto solo puede usarse dentro de funciones (variables locales).

La clase de almacenamiento register

register define variables locales que deberían almacenarse en un registro en lugar de RAM. Esto significa tamaño máximo igual al del registro (usualmente una palabra) y no se puede aplicar el operador unario & (no tiene dirección de memoria).

{ register int millas; }

Solo usar para variables que requieren acceso rápido (contadores). Definir register no garantiza almacenamiento en registro; depende de hardware e implementación.

La clase de almacenamiento static

static instruye al compilador a mantener una variable local existente durante la vida del programa, en lugar de crearla y destruirla cada vez que entra/sale de su alcance. Así, variables locales static mantienen sus valores entre llamadas a funciones.

El modificador static también puede aplicarse a variables globales, restringiendo su alcance al archivo donde se declaran.

En C, cuando static se usa en variable global, causa que solo una copia de ese miembro sea compartida por todos los objetos de su clase.

Demo en vivo
#include <stdio.h>
/* declaración de función */
void func(void);
static int count = 5; /* variable global */
main() {
    while(count--) { func(); }
    return 0;
}
/* definición de función */
void func(void) {
    static int i = 5; /* variable local static */
    i++;
    printf("i es %d y count es %d\n", i, count);
}

Resultado:

i es 6 y count es 4
i es 7 y count es 3
i es 8 y count es 2
i es 9 y count es 1
i es 10 y count es 0

La clase de almacenamiento extern

extern da referencia de una variable global visible a TODOS los archivos del programa. Al usar extern, la variable no puede inicializarse, pero apunta al nombre en una ubicación de almacenamiento definida previamente.

Cuando tienes múltiples archivos y defines una variable/global función que también se usa en otros, extern se usa en otro archivo para referenciar la variable/función definida. extern declara una variable global o función en otro archivo.

El modificador extern se usa comúnmente cuando dos o más archivos comparten las mismas variables globales o funciones.

Primer archivo: main.c

#include <stdio.h>
int count;
extern void write_extern();
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í extern declara count en el segundo archivo, mientras su definición está en main.c. Compila ambos:

$gcc main.c support.c

Produce ejecutable a.out. Al ejecutar:

count es 5

Lenguaje C

  1. Cómo el conteo de flautas influye en el rendimiento de la fresa de mango
  2. Estructuras vs Clases en C++: Guía práctica para desarrolladores embebidos
  3. Clases y Objetos en C++: Guía Práctica de Programación Orientada a Objetos
  4. Funciones y clases amigas en C++: dominando el control de acceso
  5. Entendiendo las clases de almacenamiento en C: ámbito, vida y rendimiento
  6. Entendiendo las Clases de Almacenamiento en C++: Alcance, Vida y Uso
  7. Interfaces en C++: Dominando Clases Abstractas y Funciones Virtuales Puras
  8. Clases en C#: Blueprint para programación orientada a objetos potente
  9. Domine str.count() en Python: Cómo Contar Caracteres y Subcadenas con Ejemplos
  10. Python list.count(): Guía Experta con Ejemplos Prácticos
  11. Domina Java: Entendiendo Objetos, Clases y Conceptos Básicos de POO