Anfängerfrage: Projekt mit mehreren Dateien zusammenfügen und kompilieren

Gast #2160230
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
Gast #2160260
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.