2009-07-29 13 views
21

Ich versuche mir C-Programmierung zu lehren und ich benutze DevC++ für meine IDE unter Windows XP. Ich bin ein wenig verwirrt über die richtige Art, meine eigenen Header-Dateien aufzurufen.C-Header-Dateien - Korrekter Weg zum Einbinden

Ich habe meine Datei Hauptquelle genannt main.c und eine separate Datei für Funktionen myFunctions.c, die ich bin in main.c mit ‚enthalten‚myFunctions.h‘ mit allen meinen Funktionsprototypen mit Wohnsitz in diesem Kopf genannt Datei.

myFunctions.c enthält zwei Funktionen namens showDate() und eine namens showScreen() und beide Funktionen können aus main.c alle gut und gut aufgerufen werden.

Meine Probleme begannen, als ich versuchte, showDate() aus showScreen() aufzurufen, und während der Kompilierung/Verknüpfung beschwerte ich mich, weil ich keinen Prototyp in myFunctions.c für showDate() hatte.

Was ich wissen möchte ist, welche der folgenden muss ich tun?

  1. umfassen "myFunctions.h" inside myFunctions.c

  2. der Prototyp sowohl Deklarieren in myFunctions.h und myFunctions.c
  3. den Prototyp deklarieren gerade erst in myFunctions.c

All das scheint den Compilerfehler zu korrigieren und erlaubt mir, den Funktionsbot von main.c und innerhalb von myFunctions.c aufzurufen, aber ich kann keine definitive Quelle finden, die die korrekte Prozedur ist.

Antwort

24

Verwenden Sie # 1 - #include an vielen Orten.

Niemals # 2 verwenden - niemals mehr als einmal deklarieren.

Verwenden Sie selten # 3 - deklarieren Sie etwas in einer .c-Datei, als würden Sie es nie wieder verwenden.

+6

Vielleicht überlegen Sie sich, bevor Sie zwischen # 1 und # 3 entscheiden. Verwenden Sie # 1, wenn Sie diese Funktion aus einer anderen .c-Datei aufrufen müssen. Verwenden Sie # 3, wenn die Funktion außerhalb der lokalen Datei nicht benötigt wird. Auf diese Weise reduzieren Sie Unordnung in Ihren Header-Dateien und können sie wirklich als Schnittstellendefinition verwenden. –

+4

Rechts. Funktionen, die von woanders aufgerufen werden, sollten sich in der .h-Datei befinden. Funktionen, die intern sind, sollten in der C-Datei als statisch und als Prototyp deklariert werden. Das gibt C eine dringend benötigte Modularität. –

2

Sie sollten Option 1 wählen. Oder bestellen Sie myfunctions.c so, dass die Definition der aufgerufenen Funktion vor der Funktion auftritt, die sie aufruft. Indem Sie den Header in die Datei einfügen, ermöglichen Sie dem Compiler, jegliche Nichtübereinstimmung zwischen der Deklaration und der Definition zu erfassen.

7

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

BTW DecC++ wird nicht mehr aktiv entwickelt - Sie sollten stattdessen zu Code::Blocks wechseln.

+0

Dank Neil, ich in Code :: Blocks ein wenig später –

+1

-Code aussehen :: Blocks ist fantastisch - ich erste, was mir auffiel war Code-Folding, die in DEVC++ Prost Neil wollte etwas, das ich wirklich war! –

3

Definitiv die erste Option.

1

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

Verwandte Themen