mikrocontroller.net

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


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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
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.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke vielmals!!!!
Hat mir echt geholfen!! Dieses Forum ist kaum zu toppen. Danke.

Autor: Dietmar E (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nur leider hab ich kein Buch zur Hand

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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.