www.mikrocontroller.net

Forum: Compiler & IDEs Hallo Forum & include-Verständnisproblem


Autor: Thomas G. (old_beginner)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bevor ich mein Problem beschreibe, möchte ich hiermit viele Grüße
an die Gestalter und "Mitmacher" dieser tollen Seite übermitteln.
Mein letzter Kontakt mit Mikroprozessoren war vor gut 20 Jahren. Damals 
war es der gute alte Z80.
Ich versuche nun seit einigen Wochen einem Atmega8 auf Assemblerebene 
ein bescheidenes Leben einzuhauchen (LED, LCD, i2c). Nun möchte ich es 
mit C versuchen, nicht zuletzt wegen der vorhandenen Bibliotheken.
Dieses Forum, und auch das Tutorial, haben mir bei meinen ersten 
C-Schritten sehr geholfen.
Aktuell habe ich zum Beitrag Beitrag "mehrere C files einbinden" 
folgendes Verständnisproblem:

Warum wird in die Datei Funktion.c die Header-Datei Funktion.h 
includiert?
Ist es nicht so, daß eine Funktion schon mit ihrer Definition auch schon 
deklariert ist?

File: Funktion.h
void foo( void );

File: Funktion.c
#include "Funktion.h"
void foo( void )
{
  // mach was
}


Es wäre nett, wenn mir jemand das erklären könnte.

Danke im voraus und einen schönen Abend noch.
Thomas

Autor: ANDY (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo schau mal nach Prototypen.Das sollte das erklären.

gruss
andy

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas G. schrieb:
> Warum wird in die Datei Funktion.c die Header-Datei Funktion.h
> includiert?
> Ist es nicht so, daß eine Funktion schon mit ihrer Definition auch schon
> deklariert ist?

Ja. Notwendig ist dieses Includieren hier nicht. Aber es ist von 
Vorteil, wenn man sich gleich angewöhnt es trotzdem immer zu machen. 
Denn so ist sichergestellt, dass die Definition in der C Datei und die 
Deklaration im Header auch wirklich zusammenpassen, denn andernfalls 
würde der Compiler gleich meckern.

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

Bewertung
0 lesenswert
nicht lesenswert
Thomas G. schrieb:
> Warum wird in die Datei Funktion.c die Header-Datei Funktion.h
> includiert?

Bei diesem sehr einfachen Beispiel ist es nicht wirklich erforderlich.
In der Realität werden aber oft auch Typen deklariert, die für die 
Implementierung nötig sind, also z.B. typedefs, enums oder structs.

> Ist es nicht so, daß eine Funktion schon mit ihrer Definition auch schon
> deklariert ist?

Ja, so ist es. Allerdings bietet das Einbinden der Headerdatei hier 
zumindest einen weiteren Vorzug: Weichen die Argumente oder der 
Rückgabewert einer Funktionsdefinition von der Deklaration ab, gibt es 
eine Fehlermeldung vom Compiler.

Autor: Thomas G. (old_beginner)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... danke für die prompten Antworten.

Rufus Τ. Firefly schrieb:
> Ja, so ist es. Allerdings bietet das Einbinden der Headerdatei hier
> zumindest einen weiteren Vorzug: Weichen die Argumente oder der
> Rückgabewert einer Funktionsdefinition von der Deklaration ab, gibt es
> eine Fehlermeldung vom Compiler.

... dann hat man sozusagen noch einen "Quercheck", ob die Angaben 
stimmig sind.

Danke nochmal ...

Thomas

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.