C-Header-Dateien und Kompilierung / Verknüpfung

Weiß ich, dass header-Dateien haben die forward-Deklaration der verschiedenen Funktionen, structs, etc. in den .c - Datei, die 'Anrufe' die #include, richtig? Soweit ich das verstanden habe, die "Gewaltenteilung", tritt wie diese:

Header-Datei: func.h

  • enthält vorwärts-Deklaration von Funktion
    int func(int i);

C-Quellcode-Datei: func.c

  • enthält die eigentliche definition einer Funktion
    #include "func.h"
    
    int func(int i) {
        return ++i ;
    }

C-source-Datei source.c (die "eigentliche" Programm):

#include <stdio.h>
#include "func.h"

int main(void) {
    int res = func(3);
    printf("%i", res);
}

Meine Frage ist: zu sehen, dass die #include ist einfach eine compiler-Direktive, kopiert den Inhalt des .h in der Datei, die #include ist in, wie funktioniert das .c Datei wissen, wie Sie tatsächlich führen Sie die Funktion aus? Allen, die es bekommen ist die int func(int i);, so wie es eigentlich die Funktion? Wie sieht es den Zugriff auf die eigentliche definition von func? Hat die header beinhalten eine Art 'Zeiger', der sagt "das ist meine definition, da drüben!"?

Wie funktioniert es?

Kommentar zu dem Problem
Das ist die Magie von Linker die Lösung der Definitionen und sicherzustellen, dass die Dinge, die Sie behauptet zu existieren, während der Kompilierung tatsächlich vorhanden sind. Kommentarautor: Uchia Itachi
Beim Umgang mit header-Dateien, möchten Sie vielleicht, darüber zu Lesen include-guards. Kommentarautor: Some programmer dude
Ich weiß über die include-guards (ifndef ein alle, dass), aber verzichtet Sie für die Kürze. Kommentarautor: Aristides
Mir scheint es, du denkst, dass der source-code wird verwendet, um das Programm auszuführen, wie in Skriptsprachen (JavaScript, etc). Das ist nicht der Fall. C-source-code wird zunächst transformiert (durch den compiler und linker) in Maschinen-code, der dann direkt vom Prozessor abgearbeitet hardware. Kommentarautor: zentrunix
Was meinst du, "der source-code wird verwendet, um das Programm auszuführen"? C (oder die GCC-Implementierung) ist kompiliert, nicht interpretiert. Ich weiß, es wird kompiliert, um Maschinen-code vor der Zeit. Es ist der Quellcode, der zum erzeugen der Maschinen-code. Ich bin mir nicht sicher, was Ihr Punkt ist. Kommentarautor: Aristides

InformationsquelleAutor der Frage Aristides | 2013-08-31

Schreibe einen Kommentar