Forum: Compiler & IDEs Einbinden von Dateien in C. Verständnisproblem.


von Programmieranfängeranwärter (Gast)


Lesenswert?

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.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Schau mal ins Makefile

(Oh! Er hat "Jehova" gesagt!)

von blub (Gast)


Lesenswert?

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

von Programmieranfängeranwärter (Gast)


Lesenswert?

Makefile! Das war das Stichwort. Danke!

von Volker S. (vloki)


Lesenswert?

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.

von Daniel V. (danvet)


Lesenswert?

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
Noch kein Account? Hier anmelden.