C++ Teil 7 – Sichtbarkeit und Lebensdauer von Variablen

Inhalt

Sichtbarkeit und Lebensdauer
Globale Variablen
Lokale Variablen
static – Schlüsselwort
Übungsaufgaben

In diesem Teil werden Sie erfahren, wie lange eine Variable lebt und zu welchen Zeitpunkt sie gültig ist.
Bis jetzt haben wir Variablen als einfache Sprachelemente betrachtet, die es uns ermöglichen Informationen zwischen zu speichern. Dabei haben wir stillschweigend angenommen, dass auf bereits deklarierte Variablen immer zugegriffen werden kann und dass sie so lange existieren bis das Programm beendet wird. Beides trifft nicht für alle Variablen zu.
Im Folgenden werden wir betrachten, wie der Existenz- und Sichtbarkeitsbereich von Variablen sich verhalten.

Sichtbarkeit und Lebensdauer

Jede Variable besitzt zwei Eigenschaften: Lebensdauer und Sichtbarkeit.

Die Lebensdauer oder auch der Existenzbereich beschreibt den Bereich, in dem der Variablenspeicher im RAM existiert. Endet der Existenzbereich, so wird die Variable aus dem RAM gelöscht und ihr Inhalt geht verloren.

Die Sichtbarkeit sagt uns, wann wir auf die Variable zugreifen können, um ihren Inhalt zu lesen oder zu verändern. Sie ist nicht immer gegeben, denn eine Variable kann durch eine andere verdeckt sein. Das ist dann der Fall, wenn in einem inneren Codeblock eine Variable mit dem gleichen Namen deklariert wird, diese aber schon in einem höheren Block existiert. Dabei wird die Variable aus dem inneren Block verwendet und es gibt keine Möglichkeit auf die gleichnamige Variable in dem Block darüber zuzugreifen.

Ein Beispiel, der das Ganze verdeutlichen soll:

#include <iostream>

using namespace std;

int main(void)
{
    // Lokale Variable erstellt
    int A = 5;

    // Neuer Block wird geöffnet
    {
        cout << "A= " << A << endl;  // A=5

        // neue Variable A übedeckt die A aus höherem Block
        int A = 10;

        cout << "A= " << A << endl;  // A=10

        // Block wird geschlossen
        // und darin erstellte Variablen (hier A=10) gelöscht
    }

    // Wir haben wieder Zugriff auf A mit dem Wert 5
    cout << "A= " << A << endl;  // A=5

    cout << "Programm-Ende" << endl;
    cin.get();

    return 0;
}

Über diese beiden Eigenschaften unterscheidet man zwei Typen von Variablen: globale und lokale. Schauen wir uns zunächst die Globalen an.

Globale Variablen

Bis jetzt wurden die Variablen in den Beispielen immer in der Hauptfunktion deklariert. Es besteht aber auch die Möglichkeit Variablen außerhalb davon zu erstellen. Solche Variablen werden als globale Variablen bezeichnet. Sie werden automatisch vom Compiler mit Null initialisiert und existieren so lange das Programm ausgeführt wird. Zugreifen kann man auf eine globale Variable von überall in der Datei, z. B. von Funktionen aus, die wir später kennen lernen werden.

#include <iostream>

using namespace std;

// Globale Variable erstellen
int globale_variable = 5;

int main(void)
{
    cout << "Globale Variable: " << globale_variable << endl;

    {
        cout << "Globale Variable: " << globale_variable << endl;
    }

    cout << "Programm-Ende" << endl;
    cin.get();

    return 0;
}

Selbstverständlich können auch globale Variablen durch lokale überdeckt werden.

Lokale Variablen

Als lokal werden alle die Variablen bezeichnet, die nicht global sind. Dazu gehören zum Beispiel alle Variablen in der main-Funktion und deren inneren Blöcken.
Sie werden wie gewohnt durch eine Deklaration erstellt und durch das Schließen des Codeblockes zerstört. Danach hat gibt es keine Möglichkeit mehr auf den Wert zu zugreifen.
Lokale Variablen werden nicht automatisch initialisiert, was eine manuelle Initialisierung durch den Programmierer erfordert.

Auch hier soll ein einfaches Beispiel das Verständnis unterstützen:

#include <iostream>
using namespace std;

// eine globale Variable
int variable = 5;

int main(void)
{
    cout << "Variable: " << variable << endl; // 5

    {
        // eine lokale Variable
        int variable = 20;

        cout << "Variable: " << variable << endl; // 20
    }

    cout << "Programm-Ende" << endl;
    cin.get();

    return 0;
}

static – Schlüsselwort

Eine statische Variable hat – ähnlich einer globalen Variablen – während der gesamten Ausführungszeit einen festen Speicherbereich im RAM und wird nach dem Schließen des Blocks, in dem sie deklariert wurde, nicht zerstört.
Wird der gleiche Block noch mal betreten, so besitzt die Variable immer noch den selben Wert, der ihr zuletzt zugewiesen wurde.

Durch das Schlüsselwort static kann eine lokale Variable statisch gemacht werden:

...
{
    static int variable = 5;
}
...

Das Schlüsselwort wird nur für lokale Variablen verwendet, da globale von sich aus statisch sind.

Abschließend eine kleine Grafik, die das Ganze verdeutlichen soll. Jeder Pfad stellt eine Eigenschaftskombination dar.

Eigenschaften einer Variable
Eigenschaften einer Variable

Übungsaufgaben

  1. Was ist eine globale Variable und wie lange existiert sie?
  2. Was ist der Unterschied zwischen lokalen und globalen Variablen?
  3. Wie kann man einen lokalen Variable statischen Speicherbereich zuweisen?

2 Gedanken zu “C++ Teil 7 – Sichtbarkeit und Lebensdauer von Variablen”

Schreibe einen Kommentar