Variables static en C: ejercicio resuelto

Variables static en C: ejercicio resuelto

Si buscas variables static en C ejercicio resuelto, aquí tienes el patrón clave: una variable static local mantiene su valor entre llamadas a la función, a diferencia de una variable local normal que se reinicia en cada llamada.

static tiene dos usos en C. Dentro de una función: la variable persiste en memoria durante toda la ejecución del programa. A nivel de fichero: limita la visibilidad del símbolo al fichero de compilación (enlace interno).

Enunciado

Implementa una función incrementar() que lleve un contador interno de cuántas veces ha sido llamada, sin usar ninguna variable global. Llámala tres veces desde main e imprime también un contador global para comparar los dos enfoques.

Solución en C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>

int llamadas_globales = 0; /* visible en todo el programa */

void incrementar(void) {
    static int llamadas = 0; /* se inicializa una sola vez a 0 */
    llamadas++;
    llamadas_globales++;
    printf("static local=%d  global=%d\n", llamadas, llamadas_globales);
}

int main(void) {
    incrementar();
    incrementar();
    incrementar();
    return 0;
}

Resultado esperado

1
2
3
static local=1  global=1
static local=2  global=2
static local=3  global=3

Errores frecuentes

  • Creer que static int x = 0 se reinicia a 0 en cada llamada: la inicialización solo ocurre una vez, en el arranque del programa.
  • Confundir static local con static a nivel de fichero: son el mismo modificador pero con efectos distintos según el contexto.
  • Usar una variable static en una función para guardar estado de forma no reentrante: si la función se llama desde varios hilos simultáneamente, hay una condición de carrera.
  • No inicializar una variable static explícitamente: en C, las variables static se inicializan a cero automáticamente, pero es buena práctica ser explícito.

Aplicación práctica

Las variables static locales se usan en contadores de invocación, generadores de IDs únicos, caché de valores calculados y en el patrón singleton simplificado en C. La visibilidad static de fichero es clave en la encapsulación de módulos en proyectos C sin clases.

Siguiente ejercicio recomendado

Práctica guiada y libro completo

Si quieres una ruta completa con progresión real de dificultad:

FAQ

¿Cuándo se inicializa una variable static local?

Una sola vez, antes de la primera ejecución del programa (o en el primer paso por la declaración, dependiendo del compilador y estándar). El valor inicial es 0 si no se especifica otro. A partir de ahí conserva su valor entre llamadas.

¿Qué diferencia hay entre una variable static local y una variable global?

Ambas persisten en memoria durante todo el programa. La diferencia es el ámbito: la variable static local solo es visible dentro de la función; la global es visible en todo el fichero (o en todo el programa si no es static).

¿Las variables static son seguras en programas multihilo?

No necesariamente. Si dos hilos llaman a la misma función simultáneamente, la variable static es compartida y puede producir condiciones de carrera. En código multihilo se prefiere almacenamiento local de hilo (_Thread_local en C11) o pasar el estado como parámetro.