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
Resultado esperado
Errores frecuentes
- Creer que
static int x = 0se reinicia a 0 en cada llamada: la inicialización solo ocurre una vez, en el arranque del programa. - Confundir
staticlocal constatica nivel de fichero: son el mismo modificador pero con efectos distintos según el contexto. - Usar una variable
staticen 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
staticexplícitamente: en C, las variablesstaticse 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
- Funciones en C: ejercicios resueltos
- Const en C: ejercicio resuelto
- Arrays como parámetros en C: ejercicio resuelto
- Todos los ejercicios de C
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.