Forum: Mikrocontroller und Digitale Elektronik .Header Dateien mehrmals #include ohne "multiple definition"?


von Rudii (Gast)


Lesenswert?

Guten Tag,
die Frage die jetzt kommt wird sehr "Basic" sein.

Wenn ich mit .h Dateien arbeite. Dann habe ich in einer dieser z.B. eine 
Variable.

Jetzt möchte ich diese Variable in main.c und ext_main.c nutzen. Also ->
1
#include "meine.h"
in beiden.

Dies führt unweigerlich zum Fehler "multiple definitions in xxx.o".

Darf ich Fragen wie der professionelle Umsetzer so etwas umsetzt :D?
Vielen Dank u. mfG.
Rudii

von Peter II (Gast)


Lesenswert?

Rudii schrieb:
> Darf ich Fragen wie der professionelle Umsetzer so etwas umsetzt :D?

in der Header Datei sollte alle variabel mit extern drin stehen. Dann 
passiert das auch nicht.

Variablen selber sind in C(pp) Dateien "zu Hause".

von Dennis S. (eltio)


Lesenswert?

Der Trick liegt in dem Unterschied zwischen "Definition" und 
"Deklaration". Ersteres ist in C nur einmal erlaubt und Letzteres 
beliebig oft.

Der Trick ist jetzt die (globale) Variable innerhalb einer C-Datei zu 
definieren (=Speicher anzulegen). In den Header-Dateien deklarierst du 
die Variable nur noch mit dem Schlüsselwort "extern".

Gruß
Dennis

von Fabian F. (fabian_f55)


Lesenswert?

Pack am Anfang in die Header:
#ifndef MEINE_H
#define MEINE_H

und am Ende:
#endif

Dann definiert er den Graffel nur einmal...

von Joachim B. (jar)


Lesenswert?

meine.h

#ifndef _MEINE_H
  #define _MEINE_H
  // hier alles andere
#endif

von Peter II (Gast)


Lesenswert?

Fabian F. schrieb:
> Dann definiert er den Graffel nur einmal...

Das versteckt dann das Problem nur. Dann hat man in jeder C Datei eine 
andere Variabel mit dem gleichen Namen und dann sucht er ewig.

von Rudii (Gast)


Lesenswert?

Vielen Dank. Der Begriff "extern" ist mir jetzt nahegerückt und ich habe 
ihn eingesetzt und verstanden :)

Probleme sind behoben.
Vielen Dank!

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.