Hallo, ich habe ein grundsätzliches Verständnisproblem, was die Einbindung von Dateien in C angeht. Normalerweise ist es so, dass eine Headerdatei eingebunden wird mit z.B.: #include "funktionen.h". Neben dieser Datei "funktionen.h", in welcher üblicherweise u.a. Funktionen deklariert sind, existiert dann noch eine Datei "funktionen.c", in welcher die jeweiligen Funktionen implementiert sind und die Datei "funktionen.h" ebenfalls includiert wird. Ich verstehe aber jetzt nicht ganz, woher der Compiler weiß, dass die Datei "funktionen.c" existiert und benutzt wird. Ich kann nirgends eine Einbindung der Datei "funktionen.c" finden.
Schau mal ins Makefile (Oh! Er hat "Jehova" gesagt!)
Das sagst du dem Compiler beim Kompilieren:
1 | gcc -o prog main.c funktionen.c |
oder in Einzelschritten:
1 | gcc -c main.c |
2 | gcc -c funktionen.c |
3 | gcc -o prog main.o funktionen.o |
Programmieranfängeranwärter schrieb: > Ich verstehe > aber jetzt nicht ganz, woher der Compiler weiß, dass die Datei > "funktionen.c" existiert und benutzt wird. Ich kann nirgends eine > Einbindung der Datei "funktionen.c" finden. Dem Compiler ist es auch völlig wurscht, ob die c-Datei existiert ;-) Er interessiert sich nur dafür wie eine Funktion in einer (anderen) Quell-Datei aufgerufen werden muss und das steht im Header. Der Linker hat dann möglicherweise ein Problem, wenn er im nächsten Schritt die aus den einzelnen Quelldateien (c-Dateien) eines Projektes die vom Compiler erstellten Object-Dateien zu einem Programm zusammen basteln muss und eine benötigte Funktion in keiner der Objekt-Datei enthalten ist.
Im wesentlichen gibt es zwei Schritte: - Compilieren - Linken - Compilieren: Du sagst dem Compiler, er soll funktionen.c compilieren. Daraus wird dann eine functionen.o Datei erstellt, die Daten für die spätere Hex-Datei oder BinärDatei enthält. Sofern alle notwendigen Headerdateien in der funktionen.c Datei angegeben sind, wird das Compilieren erfolgreich sein. Hast du noch eine Datei, funktionen_2.c, dann sagst du dem Compiler, er soll auch diese compilieren. Und so weiter. Wenn du alle C-Files kompiliert hast: - Linken: Du sagst dem Linker, er soll aus funktionen.o + funktionen_2.o und allen anderen *.o zusammen eine Hexdatei/Binärdatei für z.B. Atmega xxx erstellen. Fertig. Das Ganze kannst du "händisch" machen, oder mit einer Programmierumgebung. Soweit das Prinzip.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.