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.
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 :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.Code:ol_usart.h ... ... extern uint16_t data ; .... ...
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
Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
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.
Gruß
Dirk
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
Tiny ASURO Library: Thread und sf.net Seite
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..
Geändert von oderlachs (23.12.2012 um 11:31 Uhr)
Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
Manchmal ist das Forum besser *ggg*. Das Thema Deklaration und Definition z.B. hat Stefan hier (klick) gut erklärt - auch weiter oben in demselben Thread. Danach habs sogar ich kapiert.... dass ich nach einem Beispiel ind einem Fachbuch gearbeitet habe ...
Gehard - und alle - schöne Weihnachten, feiert schön und friedlich - und alles Gute.
Ciao sagt der JoeamBerg
Lesezeichen