Verschiedene Compilerphasen
-
Hallo,
ich habe mal eine Frage zum kompilieren:
Zuerst kommt ja der Präprozessor, dann Compiler und dann Linker. SO versteh ich das:
-Der Präprozessor kümmert sich ja um die # als wie #def und #ifdef
-Der Compiler wandelt dann den Quellcode in Maschinencode (0101011) um
-Und der Linker bindet die Bibliotheken (#include <stdio.h>) ein, die auch schon in Maschinencode sind.Verstehe ich das richtig? Aber warum haben dann die Bibliotheken auch schon ein #include davor? Was macht da genau der Präprozessor?
-
Bayer schrieb:
Verstehe ich das richtig?
Die Bibliotheken sind nicht die Header. Beispielsweise stdio.h, das ist eine Datei, die nur Deklarationen enthält -- einfach mal reingucken. Den Code von bspw. printf wirst du darin nicht finden. Der liegt in Maschinencode in der eigentlichen Bibliothek vor.
-
Heißt also der Präprozessor fügt oben nur die ganzen Deklarationen ein und der Linker fügt dann die Definitionen der Funktionen in Maschinencode ein?
-
Bayer schrieb:
Heißt also der Präprozessor fügt oben nur die ganzen Deklarationen ein und der Linker fügt dann die Definitionen der Funktionen in Maschinencode ein?
Genau. D.h. der Linker löst die Funktionsaufrufe in die richtigen Adressen auf.