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