Wie deklariert man eine globale Variable in C++

  1. Deklarieren eine globale Variable in einer einzigen Quelldatei in C++
  2. Deklarieren Sie eine globale Variable in mehreren Quelldateien in C++

In diesem Artikel werden mehrere Methoden zur Deklaration einer globalen Variablen in C++ erläutert.

Deklarieren eine globale Variable in einer einzigen Quelldatei in C++

Wir können eine globale Variable mit der Anweisung deklarieren, die außerhalb jeder Funktion steht. In diesem Beispiel nehmen wir die Variable vom Typ int an und initialisieren sie auf einen beliebigen 123 Wert. Auf die globale Variable kann sowohl aus dem Bereich der Hauptfunktion als auch aus jedem inneren Konstrukt (Schleife oder if-Anweisung) innerhalb der Funktion zugegriffen werden. Änderungen an der globalen Variable sind auch für jeden Teil der Hauptroutine sichtbar, wie im folgenden Beispiel gezeigt wird.

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

Ausgabe:

124
124 125 127 130

Wenn andererseits zusätzliche Funktionen ebenfalls in derselben Quelldatei definiert sind, können sie direkt auf den global_var-Wert zugreifen und ihn im Funktionsumfang modifizieren. Die globalen Variablen können auch mit einem const-Spezifizierer deklariert werden, wodurch sie nur über die aktuelle Übersetzungseinheit (Quelldatei mit allen enthaltenen Headern) zugänglich sind.

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

Ausgabe:

124

Deklarieren Sie eine globale Variable in mehreren Quelldateien in C++

Alternativ kann es globale Variablen geben, die in verschiedenen Quelldateien deklariert sind und auf die zugegriffen werden muss oder die geändert werden müssen. In diesem Fall muss die globale Variable, um auf sie zugreifen zu können, mit einem extern Spezifizierer deklariert werden, der dem Compiler (genauer gesagt dem Linker) mitteilt, wo er nach der glob_var1-Definition suchen muss.

#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 einigen Fällen kann es globale Variablen geben, die mit einem static Spezifizierer in den verschiedenen Quelldateien deklariert sind. Auf diese Variablen kann nur innerhalb der Datei zugegriffen werden, in der sie definiert sind, und sie sind von anderen Dateien aus nicht erreichbar. Wenn Sie trotzdem versuchen, sie mit extern in der aktuellen Datei zu deklarieren, wird der Compiler-Fehler auftreten.

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