Comment déclarer une variable globale en C++

Jinku Hu 12 octobre 2023
  1. Déclarer une variable globale dans un fichier source unique en C++
  2. Déclarer une variable globale dans plusieurs fichiers sources en C++
Comment déclarer une variable globale en C++

Cet article explique plusieurs méthodes de déclaration d’une variable globale en C++.

Déclarer une variable globale dans un fichier source unique en C++

Nous pouvons déclarer une variable globale avec l’énoncé qui est placé en dehors de chaque fonction. Dans cet exemple, nous supposons la variable de type int et l’initialisons à une valeur arbitraire de 123. La variable globale est accessible depuis la portée de la fonction main ainsi que toute construction interne (boucle ou instruction if) à l’intérieur de celle-ci. Les modifications apportées à la variable globale sont également visibles dans chaque partie de la routine principale, comme le montre l’exemple suivant.

#include <iostream>

using std::cout;
using std::endl;

int global_var = 123;

int main() {
  global_var += 1;
  cout << global_var << endl;

  for (int i = 0; i < 4; ++i) {
    global_var += i;
    cout << global_var << " ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Production:

124
124 125 127 130

D’autre part, si des fonctions supplémentaires sont également définies dans le même fichier source, elles peuvent accéder directement à la valeur de la global_var et la modifier dans la portée de la fonction. Les variables globales peuvent également être déclarées avec un spécificateur const, qui les oblige à n’être accessibles que par l’unité de traduction courante (fichier source avec tous les en-têtes inclus).

#include <iostream>

using std::cout;
using std::endl;

int global_var = 123;

void tmpFunc() {
  global_var += 1;
  cout << global_var << endl;
}

int main() {
  tmpFunc();

  return EXIT_SUCCESS;
}

Production:

124

Déclarer une variable globale dans plusieurs fichiers sources en C++

Il peut aussi y avoir des variables globales déclarées dans différents fichiers sources, et auxquelles il faut accéder ou qu’il faut modifier. Dans ce cas, pour accéder à la variable globale, elle doit être déclarée avec un spécificateur extern, qui indique au compilateur (plus précisément au linker) où chercher la définition glob_var1.

#include <iostream>

using std::cout;
using std::endl;

int global_var = 123;
extern int glob_var1;  // Defined - int glob_var1 = 44; in other source file

void tmpFunc() {
  glob_var1 += 1;
  cout << glob_var1 << endl;
}

int main() {
  tmpFunc();

  return EXIT_SUCCESS;
}

Dans certains cas, il peut y avoir des variables globales déclarées avec un spécificateur static dans les différents fichiers sources. Ces variables ne sont accessibles que dans le fichier où elles sont définies et ne peuvent pas être atteintes à partir d’autres fichiers. Si vous essayez toujours de les déclarer avec extern dans le fichier courant, l’erreur de compilation se produira.

#include <iostream>

using std::cout;
using std::endl;

int global_var = 123;
extern int
    glob_var2;  // Defined - static int glob_var2 = 55; in other source file

void tmpFunc() {
  glob_var2 += 1;
  cout << glob_var2 << endl;
}

int main() {
  tmpFunc();

  return EXIT_SUCCESS;
}
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