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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.