Einzelne Instanz einer globalen Variablen über alle Übersetzungseinheiten
-
Hallo zusammen,
ich habe folgendes Problem:
Ich möchte in einem Teil meines Programms (es wird eine DLL) eine Variable definieren und deklarieren, die anschließend in der gesamten DLL nur einmal zur Verfügung stehen soll. Also eine globale statische Variable.
Momentan sieht das so aus, dass ich in einer Headerdatei die Variable außerhalb aller Funktionen, innerhalb des #ifdef deklariere:
static GlobalStaticStruct globalStaticStruct;
Dieser Header wird in 2 verschiedenen *.c-Dateien inkludiert und dort verwende ich die Variable dann ganz normal:
globalStaticStruct.meber ...
Wenn ich mir allerdings in beiden Übersetzungseinheiten mal die Adresse der jeweiligen Variablen angeschaut und die sind unterschiedlich!
Woran liegt das noch?
Ich hätte aber gern, dass die Variable in allen Übersetzungseinheiten, welche den Header inkludieren dieselbe ist (also auch an derselben Adresse im Speicher liegt)! Also eine echte globale (wenn möglich statische) Variable?
Muss ich die in den inkludierenden Einheiten mit extern... bekannt machen?
Ist sicher ein Anfängerfehler (aber bin ja auch noch Anfänger)!
Bin für jede Hilfe dankbar!
Ciao
-
nur die funktionen in der datei, in der deine static variable ist, dürfen diese verändern.
entweder du rufst also diese (nicht static) funktion von den anderen dateien aus auf, oder aber du lässt das static weg und deklarierst sie extern.
-
Hm eigentlich einleuchtend, dann wundert es mich aber, dass eine andere Datei, welche den Header mit der Struktur includiert hat auch so eine Variable zur Verfügung hat (wenn auch eine eigene)!
Ein Weglassen des static im Header vor der Variablen behebt das Problem. In der inkludierenden Einheit muss ich nicht einmal ein extern angeben!
Vielen Dank!
Ciao
-
static hat genau die Bedeutung "nur in dieser Übersetzungeinheit sichtbar" (A.K.A. "internal linkage"). Definierst du static-Variablen mit demselben Namen in verschiedenen Übersetzungseinheiten, bleiben das aus diesem Grund auch verschiedene Variablen.