Forum: Compiler & IDEs Wann #include *.c oder *.h?


von Frank (Gast)


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 :-)

von Leo Schroeder (Gast)


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"

von Peter D. (peda)


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

von OldBug (Gast)


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.

von Peter D. (peda)


Lesenswert?

*.c, *.h sind aber nur Namen, Du könntest sie auch *.code und *.header
nennen.
Mußt dann bloß dem Compiler sagen, daß es C Sourcen sind (beim GCC:
-xc).


Peter

von Jörg Wunsch (Gast)


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).

von OldBug (Gast)


Lesenswert?

Ähem, gut, merged into: /dev/brain :-)

von Frank (Gast)


Lesenswert?

Dankeschön!

Hab's angepasst & läuft.

Frank

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.