Forum: Mikrocontroller und Digitale Elektronik Global Variablen in Header Dateien setzen


von Daniel (Gast)


Lesenswert?

Hallo. Bin noch ziemlich neu in der Materie und brauche eure Hilfe. Habe 
einen gut funktionierenden Code geschrieben und bin jetzt dabei alles 
etwas uebersichtlicher zu gestalten. Ich wuerde jetzt gerne Teile meines 
Codes in zusaetzliche Source Files transferieren. Ich habe nun meinen 
header file erstellt und den dazugehoerigen sourcefile.
Jetzt meine Frage. Ich moechte globalvariablen in mehreren sourcefiles 
verwenden. ZB Uhrzeitvariablen. Wenn ich diese Variablen nur im 
Mainsourcefile definiere, gibt der Compiler eine Fehlermeldung, dass ich 
die Variablen in den anderen Sourcecodes auch definieren muss. Wo muss 
ich die Variablen und wie muss ich sie definieren, sodass ich sie 
untereinander austauschen kann.
Wahrscheinlich ziemlich trivial. Nur leider hab ich kein Buch zur Hand 
und vielleicht hat jemand ein paar Sekunden Zeit, mir die Loesung zu 
sagen.

von Alex (Gast)


Lesenswert?

1. Der Linker meckert und nicht der Compiler.
2. Mach dich mit dem Keyword "extern" vertraut und lerne den Unterschied 
zwischen Definition und Deklaration.

Viel Erfolg!

von Johannes M. (johnny-m)


Lesenswert?

1.: Alex hat recht, auch wenn es ein wenig lapidar ausgedrückt ist.

2.: Es gibt die Begriffe "Deklaration" und "Definition". Eine Variable 
kann beliebig oft deklariert, aber nur einmal definiert werden. Bei 
einer Deklaration wird lediglich dem Compiler mitgeteilt, dass die 
Variable irgendwo existiert und dass er sie benutzen kann. Eine 
Definition hingegen reserviert Speicherplatz.

Wenn Du eine Variable, die in einer anderen Datei als der aktuell 
compilierten definiert ist, benutzen willst, musst Du dem Compiler 
mitteilen, dass diese Variable existiert und dass sie den Typ X hat. 
Diese Mitteilung macht man, indem man die Variable mit dem Schlüsselwort 
extern deklariert. Also
1
extern unsigned int foo;
sagt dem Compiler, dass irgendwo in einer anderen Quelldatei, die der 
Compiler in dem Moment nicht sehen kann, eine Variable foo vom Typ 
unsigned int existiert.

Wird das extern weggelassen, dann geht der Compiler von einer 
Definition aus und wenn er mehrfache Definitionen ein und derselben 
Variable zu sehen bekommt, dann gibt es eine entsprechende Fehlermeldung 
à la "multiple definition of...".

Also: In der entsprechenden Quelldatei die Variable einmal definieren 
und in der dazugehörigen Headerdatei eine extern -Deklaration und die 
Headerdatei in alle Sourcen einbinden, die die Variable benutzen sollen.

von Daniel (Gast)


Lesenswert?

Danke vielmals!!!!
Hat mir echt geholfen!! Dieses Forum ist kaum zu toppen. Danke.

von Dietmar E (Gast)


Lesenswert?

> Nur leider hab ich kein Buch zur Hand

The C Book:
http://publications.gbdirect.co.uk/c_book

von gast (Gast)


Lesenswert?

vergiss den extern - Bezeichner , und verwende für den globalen Zugriff 
auf Variablen lieber SET (z.B. void SET_Led (unsigned char ucValue) ) 
bzw. GET (z.B. unsigned char Get_LedState (void) ) Funktionen. Diese 
musst Du dir zwar selbst schreiben, brauchen etwas mehr ROM tragen aber 
zur Übersicht/Modularisierung bei.

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
Noch kein Account? Hier anmelden.