Variable estática en C

Jinku Hu 12 octubre 2023
  1. Usar la variable static para preservar el valor entre llamadas a funciones en C
  2. Usar la palabra clave static para declarar una variable dentro del ámbito del archivo en C
Variable estática en C

Este artículo demostrará múltiples métodos sobre cómo usar variables estáticas en C.

Usar la variable static para preservar el valor entre llamadas a funciones en C

La palabra clave static se utiliza en múltiples contextos, uno de ellos es para declarar la variable que mantiene su valor en la memoria entre las llamadas de función. Este tipo de variable tiene una duración de almacenamiento estática.

En el siguiente ejemplo, declaramos una variable k en el ámbito de un bloque de funciones. Cuando el flujo de control sale de la función up, el valor de k persiste en memoria hasta que el programa sale. Este comportamiento puede ser utilizado para almacenar objetos de datos de forma persistente durante la ejecución del programa.

Nótese que las variables estáticas se inicializan automáticamente a 0 si no las inicializamos explícitamente.

#include <stdio.h>
#include <stdlib.h>

static int j = 0;

void up(void) {
  static int k = 0;
  j++;
  k++;
  printf("  up() called. k=%2d, j=%2d\n", k, j);
}

int main() {
  int i;

  for (i = 0; i < 3; i++) up();

  exit(EXIT_SUCCESS);
}

Producción :

up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3

Usar la palabra clave static para declarar una variable dentro del ámbito del archivo en C

Las variables cualificadas static pueden ser declaradas fuera de cualquier función, haciéndolas visibles dentro del ámbito del fichero fuente único. Tales variables se denominan variables estáticas con enlace interno, lo que significa que sus valores sólo pueden ser utilizados por la función en el mismo archivo.

Observe que ambas funciones tienen la variable local llamada k inicializada a cero, pero cuando se llama a la función down, la variable k (declarada en up) no está en el mismo ámbito, y se inicializa una nueva en la ubicación de memoria diferente. Así, el valor negativo se muestra después de dos iteraciones. Tenga en cuenta que los parámetros de la función no pueden tener el calificador static.

#include <stdio.h>
#include <stdlib.h>

static int j = 0;

void up(void) {
  static int k = 0;
  j++;
  k++;
  printf("  up() called. k=%2d, j=%2d\n", k, j);
}

void down(void) {
  static int k = 0;
  j--;
  k--;
  printf("down() called. k=%2d, j=%2d\n", k, j);
}

int main() {
  int i;

  for (i = 0; i < 3; i++) up();
  for (i = 0; i < 2; i++) down();

  exit(EXIT_SUCCESS);
}

Producción :

up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3
down() called. k=-1, j= 2
down() called. k=-2, j= 1
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook