Hallo, Ich schreibe ein C-Programm (nicht c++) und hab eine Variable int TEST = 0; die befülle ich in meiner main() in der datei main.c mit dem wert 4711 TEST = 4711; jetzt hab ich in einer anderen C-Datei test.c eine Funktion Add() und will dort auf die Variable zugreifen. Wie kann ich das machen? der Compile schmeist mir einen Fehler raus (multiply defined) wenn ich in der header datei von der main.c die variable rein schreibe. Grußß Klaus
:
Verschoben durch User
entweder in deinem C-Lehrbuch unter 'extern' nachsehen, oder die Kurzfassung in FAQ Punkt 9: Globale Variablen über mehrere Dateien lesen.
:
Bearbeitet durch User
ahh habs in der main.h volatile extern int myint; //global und in der main c dann volatile int myint = 0; //initialisieren und inder xyz.c dann benutzen volatile int myint; funktion(){ myint +1; }
AnfängerLPC schrieb: > ahh habs das volatile ist nicht zwingend notwendig, es kommt darauf an was du mit der variabel machst.
AnfängerLPC schrieb: > und inder xyz.c dann benutzen > > volatile int myint; > > funktion(){ > > myint +1; > > } Nein. In der xyz.c dann benutzen
1 | #include "main.h" |
2 | |
3 | void funktion() { |
4 | myint + 1; |
5 | }
|
Dazu hast du das h-File, damit sicher gestellt ist, dass alle extern Deklarationen quer durch das komplette Programm über alle Files identisch sind. (und in main.c wird es ebenfalls inkludiert)
1 | #include "main.h" |
2 | |
3 | volatile int myint = 0; //initialisieren |
4 | ...
|
Da das mit der globalen Variable ja nun geklärt scheint, liest du bitte als nächstes das Kapitel zu Funktionsparametern und -Rückgabewerten in deinem C-Buch. Denn globale Variablen nur sind Notbehelfe für Sonderfälle. Wann immer möglich, sollte man darauf verzichten. Eine Funktion in der Art von
1 | int Add(int wert1, int wert2); |
z.B. wäre eine suabere Lösung. Oliver
Olli, ich hab einen DatenBuffer welcher gefüllt ist mit daten. aus verschiedenen Funktionen muss ich auf die Daten dort drin zugreifen können. Das geht leider nicht anders. Das Volatile brauch ich nicht?
AnfängerLPC schrieb: > Olli, > ich hab einen DatenBuffer welcher gefüllt ist mit daten. > aus verschiedenen Funktionen muss ich auf die Daten dort drin zugreifen > können. Man kann auch einen Zeiger auf diesen Datenpuffer an eine Funktion übergeben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.