Wann #include *.c oder *.h?

Gast #100666
Lesenswert?

Hallo @all

Mache gerade meine ersten Gehversuche mit dem AVR-GCC. Hab eine main.c
mit der main(). Diese ruft aus einer screen.c ne Funktion auf, die in
der screen.h deklariert ist. Ich verstehe nur nicht, warum ich in der
main.c die screen.c includieren muß und nicht wie z.B. bei MS-C++ die
screen.h? Funktionieren tut es. Grundsätzlich kann also nix falsch
sein. Im Grunde scheint es mir mit #include.c sogar logischer.
Vielleicht kann mich jemand aukfklären;-)

Vielen Dank!
Frank :-)
Gast #100667
Lesenswert?

in screen.h:
 void foo(void);

in screen.c:
 #include "screen.h"
 void foo()
 {
 }

in main.c:
 #include "screen.h"
 ...
 foo();

im Makefile:
 SRC += screen.c

"#include.c" ist nicht gut und auch nicht "logisch"
#100668
Lesenswert?

Wenn man ein *.c includiert, muß man es vom Projekt ausschließen, da
sonst der Code zweimal erzeugt wird und dann der Linker meckert.

Daher macht man es nicht (ist aber nicht verboten).

Um nun die Variablen und Funktionen in einem anderen Objekt bekannt zu
machen includiert man dort also nur das *.h.


Peter
Gast #100669
Lesenswert?

Btw: in dem Fall wird in der screen.h keine Funktionsdeklaration
vorgenommen, sondern lediglich der Prototyp hinterlegt (damit der
Compiler weis, welche Parameter die Funktion erwartet).
Das "void" in einem Prototypen oder gar in der Funktionsdeklaration
wegzulassen ist "old-style", und sollte in C nicht mehr Praktiziert
werden.
Gast #100671
Lesenswert?

@OldBug: doch doch, der Prototyp ist die Deklaration, und diese
gehört (für Funktionen, die in mehr als einer Quelle benutzt werden)
in eine Headerdatei.  Was dort nicht drinsteht ist die Definition
(mit einer Ausnahme: bei `inline' deklarierten Funktionen).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren