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


von Thomas G. (old_beginner)


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

von ANDY (Gast)


Lesenswert?

Hallo schau mal nach Prototypen.Das sollte das erklären.

gruss
andy

von Stefan E. (sternst)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Thomas G. (old_beginner)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.