Sobes.tech
Junior

¿Cuándo y cuánto tiempo existen las variables globales y locales en C++?

sobes.tech AI

Respuesta de la IA

Variables globales

  • Tiempo de existencia: Desde el inicio del programa hasta su finalización.
  • Lugar de almacenamiento: Normalmente en el área de memoria estática (.data o sección .bss del archivo ejecutable).
  • Inicialización:
    • Las variables globales no estáticas, definidas a nivel de archivo, con constructores no triviales, se inicializan antes de la llamada a main().
    • Las variables globales con inicialización a cero (por ejemplo, int i = 0;) también se inicializan antes de main().
    • Las variables definidas con const o con duración de almacenamiento estático se inicializan al cargar el programa.
  • Disponibilidad: Son visibles en todas las funciones dentro del ámbito.

Variables locales

  • Tiempo de existencia: Desde la definición de la variable dentro de un bloque de código (función, ciclo, condicional, etc.) hasta la salida de ese bloque.
  • Lugar de almacenamiento: Normalmente en la pila (para variables automáticas). Las variables locales estáticas se almacenan en el área de memoria estática.
  • Inicialización:
    • Las variables locales automáticas no se inicializan por defecto (contienen "basura"). Requieren inicialización explícita.
    • Las variables locales estáticas se inicializan una vez en su primera declaración.
  • Disponibilidad: Solo son visibles dentro del bloque de código donde se definen.

Ejemplos

// Variable global
int global_variable = 10;

void some_function() {
    // Variable local (automática)
    int local_variable_1; // No inicializada

    // Variable local (automática) con inicialización
    int local_variable_2 = 20;

    // Variable local estática
    static int static_local_variable = 30; // Se inicializa una vez

    // Acceso a la variable global
    global_variable++;

    // Acceso a variables locales
    local_variable_1 = global_variable;
    static_local_variable++;

    // Después de salir de some_function(), local_variable_1 y local_variable_2 dejan de existir
    // static_local_variable continúa existiendo, conservando su valor
}

int main() {
    some_function();
    some_function(); // static_local_variable ha conservado su valor
    // La variable global está disponible aquí
    // local_variable_1 y local_variable_2 no están accesibles

    return 0;
}

Tabla comparativa

Característica Variables globales Variables locales (automáticas) Variables locales estáticas
Tiempo de existencia Desde el inicio hasta la finalización del programa Desde la definición hasta la salida del bloque de código Desde la primera declaración hasta la finalización del programa
Lugar de almacenamiento Área de memoria estática (.data, .bss) Pila Área de memoria estática (.data, .bss)
Inicialización Antes de llamar a main() o al cargar el programa No se inicializan por defecto. Requieren inicialización explícita Una vez en la primera declaración
Disponibilidad En todo el ámbito del archivo Solo dentro del bloque de código Solo dentro del bloque de código