www.mikrocontroller.net

Forum: Compiler & IDEs Header Dateien und Linker


Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe zwei .c files die die selben Header Dateien benötigen. Wenn ich 
nun in jedes file eine include-Anweisung schreibe, kapiert dann der 
Linker dass ich für das eigentliche Programm den Inhalt der 
Headerdateien nur einmal benötige, oder wird der Inhalt am Ende wirklich 
zweimal ins fertige Programm geschrieben und damit unnötig Speicherplatz 
verschwendet?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Linker hat mit Headerdateien überhaupt gar nichts am Hut.

Der Inhalt von Headerdateien wird auch gar nichts "ins Programm 
geschrieben".

Wenn Du allerdings den Fehler begehst, in Headerdateien Dinge nicht nur 
zu deklarieren, sondern auch zu definieren, dann wird der Linker sich 
über doppelt definierte Symbole beschweren.

Dir ist nicht klar, was ich mit der Unterscheidung zwischen Deklaration 
und Definition meine?


Nehmen wir mal eine globale Variable:
int meineGlobaleVariable;

ist die Definition der Variablen. So etwas darf im gesamten Programm 
genau einmal auftauchen, und hat daher in einer Headerdatei nichts 
verloren.
So etwas gehört in eine Source-Datei (*.c).
extern int meineGlobaleVariable;

Das ist eine Deklaration einer anderswo definierten Variablen. Das kann 
in einer von zig Source-Dateien eingebundenen Headerdatei stehen, ohne 
daß es zu Problemen führt.

Damit das Programm erfolgreich gelinkt werden kann, muss allerdings 
genau eine Definition im Programm vorhanden sein.

Autor: Alois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das ist mir klar. Es geht mir auch nicht darum ob es Probleme 
gibt, wenn Headerdateien mehrfach eingebunden werden. Meine Frage ist, 
ob beim Übersetzen dann nicht unnötig Speicherplatz verschwendet wird, 
weil der Code der Headerdatei dann mehrfach im fertigen Programm 
vorhanden ist.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Code? In einer Headerdatei ist kein Code.

Darin sind nur #defines, Typdeklarationen, Variablendeklarationen (s.o.) 
und Funktionsprototypen zu finden - und die werden zu exakt 0 Bytes Code 
übersetzt.

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.