Dichiarare una variabile globale in C++

Jinku Hu 12 ottobre 2023
  1. Dichiarare una variabile globale in un singolo file di origine in C++
  2. Dichiarare una variabile globale in più file di origine in C++
Dichiarare una variabile globale in C++

Questo articolo spiegherà diversi metodi su come dichiarare una variabile globale in C++.

Dichiarare una variabile globale in un singolo file di origine in C++

Possiamo dichiarare una variabile globale con l’istruzione che è posta al di fuori di ogni funzione. In questo esempio, assumiamo la variabile di tipo int e la inizializziamo con un valore 123 arbitrario. È possibile accedere alla variabile globale dall’ambito della funzione main così come da qualsiasi costrutto interno (bucle o istruzione if) al suo interno. Le modifiche a global_var sono visibili anche a ciascuna parte della routine main, come mostrato nell’esempio seguente.

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

Produzione:

124
124 125 127 130

D’altra parte, se nello stesso file sorgente sono definite anche funzioni aggiuntive, possono accedere direttamente al valore global_var e modificarlo nell’ambito della funzione. Le variabili globali possono anche essere dichiarate con uno specificatore const, che le forza ad essere accessibili solo attraverso l’unità di traduzione corrente (file sorgente con tutte le intestazioni incluse).

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

Produzione:

124

Dichiarare una variabile globale in più file di origine in C++

In alternativa, potrebbero esserci variabili globali dichiarate in diversi file di origine e che devono essere accessibili o modificate. In questo caso, per accedere alla variabile globale, deve essere dichiarata con uno specificatore extern, che dice al compilatore (più precisamente al linker) dove cercare la definizione 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;
}

In alcuni casi potrebbero esserci variabili globali dichiarate con uno specificatore static nei diversi file sorgente. Queste variabili sono accessibili solo all’interno del file in cui sono definite e non possono essere raggiunte da altri file. Se provi ancora a dichiararli con extern nel file corrente, si verificherà l’errore del compilatore.

#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;
}
Autore: 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