Variable statique en C

Jinku Hu 12 octobre 2023
  1. Utiliser des variables static pour préserver la valeur entre les appels de fonctions en C
  2. Utilisez le mot-clé static pour déclarer une variable dans le champ d’application du fichier en C
Variable statique en C

Cet article présente plusieurs méthodes d’utilisation des variables statiques en C.

Utiliser des variables static pour préserver la valeur entre les appels de fonctions en C

Le mot-clé static est utilisé dans de multiples contextes, l’un d’entre eux est de déclarer la variable qui garde sa valeur en mémoire entre les appels de fonction. Ce type de variable a une durée de stockage statique.

Dans l’exemple suivant, nous déclarons une variable k dans un bloc de fonction. Lorsque le flux de contrôle quitte la fonction up, la valeur de k persiste en mémoire jusqu’à ce que le programme se termine. Ce comportement peut être utilisé pour stocker des objets de données de manière persistante pendant l’exécution du programme.

Notez que les variables statiques sont automatiquement initialisées à 0 si nous ne les initialisons pas explicitement.

#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);
}

Production :

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

Utilisez le mot-clé static pour déclarer une variable dans le champ d’application du fichier en C

Les variables qualifiées static peuvent être déclarées en dehors de toute fonction, ce qui les rend visibles à l’intérieur du périmètre du fichier source unique. Ces variables sont appelées variables statiques avec lien interne, ce qui signifie que leurs valeurs ne peuvent être utilisées que par la fonction dans le même fichier.

Notez que la variable locale nommée k est initialisée à zéro dans les deux fonctions, mais lorsque la fonction down est appelée, la variable k (déclarée en up) n’est pas dans la même portée, et une nouvelle est initialisée à l’emplacement mémoire différent. Ainsi, la valeur négative est affichée après deux itérations. Notez que les paramètres de la fonction ne peuvent pas avoir un qualificatif 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);
}

Production :

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
Auteur: 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