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.
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!
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.
Danke vielmals!!!! Hat mir echt geholfen!! Dieses Forum ist kaum zu toppen. Danke.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.