C-Header-Dateien – Richtiger Weg zum Einschließen

Lesezeit: 3 Minuten

Benutzer-Avatar
Paul Woodwart

Ich versuche, mir C-Programmierung beizubringen und verwende DevC++ für meine IDE unter Windows XP. Ich bin ein wenig verwirrt darüber, wie ich meine eigenen Header-Dateien richtig aufrufen kann.

Ich habe meine Hauptquelldatei namens main.c und eine separate Datei für Funktionen namens myFunctions.c, die ich in main.c verwende ‘include “myFunctions.h” mit all meinen Funktionsprototypen, die sich in dieser Header-Datei befinden.

myFunctions.c enthält zwei Funktionen, eine namens showDate() und eine namens showScreen() und beide Funktionen können schön und gut von main.c aufgerufen werden.

Meine Probleme begannen, als ich versuchte, showDate() innerhalb von showScreen() aufzurufen, und während des Kompilierens/Verknüpfens beschwerte es sich, weil ich in myFunctions.c keinen Prototyp für showDate() hatte.

Was ich wissen möchte, ist, was ich tun muss?

  1. Fügen Sie „myFunctions.h“ in myFunctions.c ein

  2. Deklarieren Sie den Prototyp sowohl in myFunctions.h als auch in myFunctions.c
  3. Deklarieren Sie den Prototyp nur in myFunctions.c

All dies scheint den Compiler-Fehler zu korrigieren und es mir zu ermöglichen, den Funktions-Bot von main.c und innerhalb von myFunctions.c aufzurufen, aber ich kann keine definitive Quelle finden, die das richtige Verfahren ist.

Verwenden Sie #1 – #include an vielen Stellen.

Verwenden Sie niemals Nr. 2 – deklarieren Sie niemals etwas mehr als einmal.

Verwenden Sie selten Nr. 3 – deklarieren Sie etwas in einer .c-Datei, als ob Sie es nie wiederverwenden würden.

  • Ziehen Sie vielleicht die Sichtbarkeit in Betracht, bevor Sie sich zwischen Nr. 1 und Nr. 3 entscheiden. Verwenden Sie #1, wenn Sie diese Funktion von einer anderen .c-Datei aufrufen müssen. Verwenden Sie #3, wenn die Funktion nirgendwo außerhalb der lokalen Datei benötigt wird. Auf diese Weise reduzieren Sie das Durcheinander in Ihren Header-Dateien und können sie wirklich als Schnittstellendefinition verwenden.

    – Don Joh

    29. Juli 2009 um 12:40 Uhr

  • Recht. Funktionen, die von woanders aufgerufen werden, sollten sich in der .h-Datei befinden. Interne Funktionen sollten als statisch deklariert und in der .c-Datei prototypisiert werden. Das verleiht C die dringend benötigte Modularität.

    – David Thornley

    29. Juli 2009 um 17:16 Uhr

Die Header-Datei sollte die Prototypen enthalten. Sie fügen es dann überall dort ein, wo diese Prototypen verwendet werden, einschließlich der .c-Datei, die die Funktionsdefinitionen enthält.

Übrigens wird DecC++ nicht mehr aktiv weiterentwickelt – Sie sollten einen Wechsel in Betracht ziehen Code::Blöcke stattdessen.

  • Danke Neil, ich werde mir Code::Blocks etwas später ansehen

    – Paul Woodward

    29. Juli 2009 um 12:48 Uhr

  • Code::Block ist fantastisch – das erste, was mir aufgefallen ist, war Code Folding, was ich wirklich in DevC++ haben wollte Cheers Neil!

    – Paul Woodward

    29. Juli 2009 um 15:35 Uhr

Definitiv die erste Option.

Sie sollten Option 1 wählen. Oder ordnen Sie myfunctions.c so an, dass die Definition der aufgerufenen Funktion vor der Funktion steht, die sie aufruft. Indem Sie den Header in die Datei aufnehmen, ermöglichen Sie dem Compiler, jede Diskrepanz zwischen der Deklaration und der Definition zu erkennen.

Wie alle anderen bereits gesagt haben, sollten Sie die erste Option verwenden. Die allgemeine Regel lautet, dass sich Funktionsprototypen in .h-Dateien und ihre Implementierungen in .c-Dateien befinden.

1246370cookie-checkC-Header-Dateien – Richtiger Weg zum Einschließen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy