Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage: Projekt mit mehreren Dateien zusammenfügen und kompilieren


von Yanick (Gast)


Lesenswert?

Hallo zusammen!
ich bin in Sachen uC-Programmierung noch Anfänger, also sorry falls die 
Frage für den ein oder anderen etwas dümmlich klingt. Ich habe in etwas 
das gleiche Problem wie in dem bereits heute erstellten Thread "Probleme 
bei Wertübergabe zwischen verschiedenen Funktionen".
Ich habe mein kleines Projekt in mehrere Dateien gespeichert und möchte 
es nun zusammenfügen.

Es will nicht so ganz klappen...Wenn ich aber die Funktion/Variable 
einer Datei aufrufen will, muss ich doch die Besagte in eine Headerdatei 
reinpacken und ich müsste sie doch dann aufrufen können.

Oder ist es so, dass man nur Funktionen innerhalb einer Datei aufrufen 
kann?

Grüße

von John (Gast)


Lesenswert?

Funktionen und Variablen müssen in einer Headerdatei als extern 
deklariert und in den entsprechenden C-Datei definiert werden. Soll 
heissen:

in foo.h schreibst du beispielsweise:
1
extern int fooVar;
2
extern void fooFunc();

in der foo.c schreibst du:
1
#include "foo.h"
2
int fooVar;
3
void fooFunc()
4
{
5
  // Code
6
}

Sprich bei der Deklaration teilst du dem Compiler mit, das es da etwas 
mit diesem namen und von diesem Typ gibt. Trifft der Compiler später in 
der C-Datei auf ein solches Symbol weiss er "Aha, ich kenne die Funktion 
nicht, aber anscheinend gibt es sie." Der Linker der anschließend die 
einzeln kompilierten Dateien zusammenfügt suchst dann diese. Wäre sie 
nicht in einer anderen C-Datei definiert wäre ein Linkerfehler die Folge 
(nicht aufgelöstes externes Symbol).

Die eigentliche Implementierung machst du in der C-Datei in dem du die 
Variable bzw Funktion genau definierst. Schreibst du die Definition in 
die Headerdatei hat dies Fehlermeldungen "Mehrfachdeklaration" zur 
Folge. Denn genau das wurde sie. Der Compiler übersetzt jede Datei für 
sich, und es darf keine 2 Symbole mit dem gleichen Namen geben. Denke 
einfach daran, dass
1
#include "foo.h"
bedeutet. Pack den Inhalt von der Datei foo.h hier an diese Stelle. 
Bindest du die Headerdatei in mehreren C-Dateien ein, und hast du 
Deklarationen in diesen werden Variablen/Funktionen mehrfach deklariert. 
Da weiss dann der Compilier nicht was er tun soll.

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.