In C können Variablen unterschiedliche Sichtbarkeiten haben: lokal (innerhalb eines Blocks), global (im gesamten Datei) und dateispezifische Sichtbarkeit (static). Das richtige Management der Sichtbarkeiten ist wichtig für die Vorhersagbarkeit des Verhaltens und zur Vermeidung von Namenskonflikten.
Sind in allen Funktionen der Datei sichtbar, und wenn sie mit extern deklariert sind, im gesamten Projekt.
Werden beim Betreten eines Blocks (z. B. einer Funktion oder Schleife) erstellt. Sind außerhalb des Deklarationsblocks nicht sichtbar.
static int foo; — nur für die aktuelle Datei.
Beispiel:
static int counter = 0; // Nur innerhalb der Datei void increment() { int temp = 10; // lokale Variable ++counter; }
Wenn globale und lokale Variablen denselben Namen haben, welche wird dann innerhalb der Funktion verwendet und warum?
Antwort: Es wird die lokale verwendet, da sie den globalen Namen innerhalb ihres Sichtbarkeitsbereichs "schattet". Die globale Variable bleibt außerhalb des Deklarationsblocks der lokalen Variable zugänglich.
Beispiel:
int value = 5; void foo() { int value = 10; printf("%d", value); // gibt 10 aus, nicht 5 }
Geschichte
Geschichte
static für eine Hilfsfunktion und -variable anzugeben, was zu Namenskonflikten beim Linken führte und auch zu unvorhersehbaren Fehlern beim Zusammenstellen verschiedener Teile des Projekts.Geschichte
Es gab Fälle, in denen globale Variablen in multithreaded Code ohne angemessene Synchronisierung verwendet wurden. Aufgrund der impliziten Sichtbarkeit und Unachtsamkeit bei der Änderung von Werten in verschiedenen Threads kam es zu Datenrennen (data race).