Forum: PC-Programmierung multiple definition of variable


von Jan (Gast)


Lesenswert?

Hallo,
ich habe eine Variable, die ich gerne in mehreren files benutzen möchte.
Die Variable habe ich in einer Header definiert.

a.h
1
#ifndef A_H_
2
#define A_H_
3
bool isValid
4
#endif

wenn ich diese Header jetzt in anderen c-files includiere, bekomme ich 
beim bauen den error multiple definition of 'isValid'.

Aber warum? A_H_ wird beim ersten mal doch definiert und somit darf 
isValid doch eigentlich nicht noch einmal definiert werden oder?

Wie bekomme ich es sonst hin, dass ich isValid in anderen c-files 
benutzen kann?

von Dr. Sommer (Gast)


Lesenswert?

Jan schrieb:
> Aber warum? A_H_ wird beim ersten mal doch definiert und somit darf
> isValid doch eigentlich nicht noch einmal definiert werden oder?

Das gilt immer nur für einen Compiler-Lauf. Wenn die zweite .c Datei 
kompiliert wird, gibt's A_H_ nicht mehr. Das "#ifndef A_H_" schützt nur 
davor, den selben Header bei einem Compiler-Aufruf mehrfach zu 
inkludieren.

In der Header-Datei schreibst du:
1
#ifndef A_H_
2
#define A_H_
3
extern bool isValid;
4
#endif
Und in einer .c -Datei:
1
#include "a.h"
2
bool isValid;

Dann funktioniert es. Es ist aber ziemlich unschön, von mehreren Dateien 
auf eine Variable zuzugreifen; das wird schnell unübersichtlich, und 
verschiedene Vorgänge beeinflussen sich gegenseitig. Besser macht man so 
etwas mit Kapselung, Getter/Setter-Funktionen, ggf. OOP.

von Jan (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Das gilt immer nur für einen Compiler-Lauf. Wenn die zweite .c Datei
> kompiliert wird, gibt's A_H_ nicht mehr. Das "#ifndef A_H_" schützt nur
> davor, den selben Header bei einem Compiler-Aufruf mehrfach zu
> inkludieren.

ahso.
Danke dir für die Erläuterung

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.