Junior
Wann und wie lange existieren globale und lokale Variablen in C++?
sobes.tech KI
Antwort von AI
Globale Variablen
- Lebensdauer: Vom Start des Programms bis zu seinem Ende.
- Speicherort: Normalerweise im statischen Speicherbereich (.data oder .bss Sektion der ausführbaren Datei).
- Initialisierung:
- Nicht-statische globale Variablen, die auf Fachebene definiert sind, mit nicht-trivialen Konstruktoren, werden vor dem Aufruf von
main()initialisiert. - Globale Variablen mit Nullinitialisierung (z.B. int i = 0;) werden ebenfalls vor
main()initialisiert. - Mit
constdeklarierte Variablen oder solche mit statischer Speicherdauer werden beim Laden des Programms initialisiert.
- Nicht-statische globale Variablen, die auf Fachebene definiert sind, mit nicht-trivialen Konstruktoren, werden vor dem Aufruf von
- Verfügbarkeit: Sind in allen Funktionen im Gültigkeitsbereich sichtbar.
Lokale Variablen
- Lebensdauer: Vom Zeitpunkt der Deklaration innerhalb eines Codeblocks (Funktion, Schleife, Bedingung usw.) bis zum Verlassen dieses Blocks.
- Speicherort: Normalerweise im Stack (für automatische Variablen). Statische lokale Variablen werden im statischen Speicherbereich gespeichert.
- Initialisierung:
- Automatische lokale Variablen werden standardmäßig nicht initialisiert (enthalten "Müll"). Erfordern eine explizite Initialisierung.
- Statische lokale Variablen werden einmal bei ihrer ersten Deklaration initialisiert.
- Verfügbarkeit: Nur innerhalb des Codeblocks sichtbar, in dem sie definiert sind.
Beispiele
// Globale Variable
int global_variable = 10;
void some_function() {
// Lokale Variable (automatisch)
int local_variable_1; // Nicht initialisiert
// Lokale Variable (automatisch) mit Initialisierung
int local_variable_2 = 20;
// Statische lokale Variable
static int static_local_variable = 30; // Wird einmal initialisiert
// Zugriff auf die globale Variable
global_variable++;
// Zugriff auf lokale Variablen
local_variable_1 = global_variable;
static_local_variable++;
// Nach Verlassen von some_function() hören local_variable_1 und local_variable_2 auf zu existieren
// static_local_variable existiert weiterhin und behält seinen Wert
}
int main() {
some_function();
some_function(); // static_local_variable hat seinen Wert behalten
// Globale Variable ist hier zugänglich
// local_variable_1 und local_variable_2 sind nicht zugänglich
return 0;
}
Vergleichstabelle
| Merkmal | Globale Variablen | Lokale Variablen (automatisch) | Statische lokale Variablen |
|---|---|---|---|
| Lebensdauer | Vom Programmstart bis zum Ende | Vom Zeitpunkt der Deklaration bis zum Verlassen des Blocks | Vom ersten Erreichen der Deklaration bis zum Ende des Programms |
| Speicherort | Statischer Speicherbereich (.data, .bss) | Stack | Statischer Speicherbereich (.data, .bss) |
| Initialisierung | Vor dem Aufruf von main() oder beim Laden des Programms |
Nicht standardmäßig initialisiert. Erfordert explizite Initialisierung | Einmal bei der ersten Deklaration |
| Verfügbarkeit | Überall im Gültigkeitsbereich der Datei | Nur innerhalb des Codeblocks | Nur innerhalb des Codeblocks |