PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit EXTERN in Headerdatei



oderlachs
23.12.2012, 09:17
Hallo Freunde von C/C++ !
Ich habe da mal ein Problem mit einer Deklarierung in einer Headerdatei. Ich könnte die Deklarierung ja in der Main machen, aber da ich mehrere Projekte mit Datenausgaben über USART, also seriele Übertragung habe, möchte ich eine H-Datei nutzen...
zum Thema: ich habe in mehreren Projekten Daten zu übertragen die seriel an Anzeigen,LCD's, Funkmodulen u.ä. gehen, darum auch Arbeiten mit eigener Headerdatei.

ich habe in der h-datei eine Variabe unint16_t so deklariert :

ol_usart.h
...
...
extern uint16_t data ;
....
...


Ich binde die "ol_usart.h" als include Datei in die Main ein, trotzdem meckert der Compiler über diese variable data. Nur wenn ich data in der main deklariere klappt die Compilierung mit AVR-Studio.
Die in der Header auch mit "extern" deklarierten Funktionen werden makellos eingebunden und compiliert....
Leider geht auch die Literatur zu C /C++ kaum auf die Headerdateien ein, jedenfalls die Grundkursbücher. Na ja werde nochmal die dicke über 1000 seitige "C-Bibel" durchblättern müssen , vielleicht finde ich was, aber vieleicht weiss ein anderer von hier des Rätsels Lösung, da dank ich schon mal für die Unterstützung

Gerhard

Dirk
23.12.2012, 09:31
Wo ist denn data deklariert? Mit "extern uint16_t data;" wird der Compiler ja nur darauf hingewiesen, dass data WOANDERS (mit "uint16_t data") deklariert ist.

markusj
23.12.2012, 10:51
Hallo Gerhard,

wie Dirk geschrieben hat: "extern" sagt dem Compiler: "Es gibt irgendwo anders eine entsprechende Variablendefinition". Wobei "irgendwo" in dem Kontext letztendlich eine C-Datei sein muss. Letztendlich, weil die entsprechende Quelltextzeile auch in einem via #include eingebundenen Header stehen könnte, in der Regel ist das aber nicht gewollt.

Das ist übrigens der Unterschied zwischen Deklaration ("Es gibt ...") und Definition ("Hier gibt es ..."), eine beliebte Ursache für Verwirrungen. Erst bei der Definition reserviert der Compiler Platz für die Variable, Deklarationen sind erst Mal nur Namen die später in die Speicherstelle umgesetzt werden. Und mit "extern" erfolgt eine solche Deklaration.

mfG
Markus

oderlachs
23.12.2012, 11:23
habt vielen Dank Ihr beide ! Ja da habe ich noch Nachholebedarf , trotz etwas C Ausbildung (Shitt Unfall). Kann auch sein das ich da was mit Pascal(Delphi) verwechsle, was für mich bis vor gut 2 Jahren die Programmiersprache eigentlich war. Aber man kann ja halt mal hier nachlesen und auch fragen, denn Keiner ist ja vollkommen...

Danke

Gerhard

PS : ich muss zugestehen, dass ich nach einem Beispiel ind einem Fachbuch gearbeitet habe, also kann man diesen auch nicht "blind" verstehen.
Nun werde ich das dicke DataBeckerBuch "Das Grundlagenbuch, C++" durchackern mal sehen ob das besser ist..

oberallgeier
23.12.2012, 19:04
... dass ich nach einem Beispiel ind einem Fachbuch gearbeitet habe ...Manchmal ist das Forum besser *ggg*. Das Thema Deklaration und Definition z.B. hat Stefan hier (klick) gut erklärt (https://www.roboternetz.de/community/threads/45352-Headerdatei(en)-für-ATMega32?p=434610&viewfull=1#post434610) - auch weiter oben in demselben Thread. Danach habs sogar ich kapiert.

Gehard - und alle - schöne Weihnachten, feiert schön und friedlich - und alles Gute.