Ich kapiers nicht
-
Hallo,
ich habe ein kleines Problem und komme einfach nicht
dahinter was an meinem Programm falsch ist.
Ich hab mal ein kleines Beispiel gebastelt wol mein Problem auftaucht.////////////////////////////////////////////////////////// //main.c #include "main.h" int main(int argc, char* argv[]) { lStatic = 100; // lStatic erhält den Wert 100 lStatic = 200; // lStatic erhält den Wert 200 Test(); // lStatic Wert bleibt unverändert // Warum wird der Wert von Static nicht auf 99 gesetzt? return 0; }; ////////////////////////////////////////////////////////// //main.h #ifndef MAIN_H #define MAIN_H #include "glob.h" #include "test.h" #endif //MAIN_H ////////////////////////////////////////////////////////// //glob.h #ifndef GLOB_H #define GLOB_H static unsigned long lStatic; #endif //GLOB_H ////////////////////////////////////////////////////////// //test.c #include "main.h" void Test() { lStatic = 99; }; ////////////////////////////////////////////////////////// //test.h #ifndef WORK_H #define WORK_H void Work(); #endif //WORK_H //////////////////////////////////////////////////////////
Ich hoffe jemand kann mir bei meinem Problem helfen.
Danke schon mal für alle InformationenBye Peter.
-
Nachdem Du in Deiner .h-Datei eine Variable definierst, ist diese Variable in allen Quellen bekannt, die diese .h-Datei includieren. Das hätte normalerweise einen Linkerfehler verursacht, wenn der selbe Bezeichner mehrmals gelinkt werden soll.
Du hast diese Variable aber mit static qualifiziert -> den Sichtbarkeitsbereich eingeschränkt. Deshalb sind zwei Variablen entstanden, die sich gegenseitig nicht beeinflussen.
Die Lösung ist einfach: Erstelle zu Deiner .h Datei eine passende .c, in der ganz einfach dises Variable definiert (ohne static) wird. In der .h änderst Du das 'static' in 'extern'.
-
danke erstmal für die schnelle Hilfe.
Ich habe gedacht das durch das#ifndef GLOB_H #define GLOB_H ... #endif //GLOB_H
die Variable nur einmal erstellt wird.
Ich werde mir wohl nochmal etwas aus meinem
C/C++ Buch durchlesen müssen.Bye Peter.
-
jep, nur einmal pro Uebersetzungseinheit!
Aber du hast ja 2 uebersetzungseinheiten