Forum: Compiler & IDEs globale Variablen richtig einbinden


von Mirko H. (Gast)


Lesenswert?

hi,

ich teile meinen C-Code zwecks Übersichtlichkeit in mehrere Files auf. 
Igendwie habe ich aber ständig das Problem, dass meine Globalen 
Variablen von Programmteilen nicht gefunden werden.

Wollt das Problem mal ein für alle mal gelöst sehen. Deshalb meine 
Frage.

Also es gibt natürlich:
main.c
main.h

dann zB noch:
funktionenA.c
funktionenA.h
funktionenB.c
funktionenB.h

in main.h habe ich natürlich funktionenA.h und funktionenB.h includiert

wenn ich nun aber z.B. in einer Funktion die in funktionenB.c drinsteht 
eine Struktur brauche, die in funktionenA.h geschrieben steht - wie komm 
ich da am praktischsten dran?

Normalerweise fang ich dann planlos an überall alles mögliche zu 
inkludieren. Doch dann bekomm ich meisst eine Endlosschleife beim 
Compilieren und bastle dann ewig hin bis es läuft.

Da muss es doch eine Standardlösung geben

vielen Dank
Mirko

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Nur mal 2 der über 800 Suchtreffer zu "header global" aus dem hiesigen 
Forum

Beitrag "Fehler bei Variablendefinition im Header-File (AVR, GCC)"
Beitrag "eigene Header files erstellen"

Darin sollten Deine Fragen beantwortet sein, evtl auch in

http://www.mikrocontroller.net/articles/Include-Files_(C)

von Mirko H. (Gast)


Lesenswert?

Danke vielmals für die Antwort - bin schon ein Stück weitergekommen 
allerdings an einer Stelle hakts noch

den Tipps aus Beitrag "Globale Variablen, mehrere Dateien" 
folgend hab ich mir eine Datei globals.h angelegt und folgendes 
reingeschrieben:

#ifndef EXTERN
#define EXTERN extern
#endif

EXTERN unsigned int LED1;
EXTERN unsigned int LED2;


EXTERN struct DataType
{
  char time[10];
        char date[10];
        int value;
} Data ;


main.h
#define EXTERN
#include "globals.h"
#include "A.h"
#include "B.h"

in A.h bzw. B.h
#include "globals.h"

in main.c, A.c und B.c
#include "main.h" bzw. "A.h" bzw. "B.h"

Für die extern deklarierten Varialen LED1 und 2 funktioniert das auch. 
Allerdings bekomme ich beim Compilieren den Fehler "redefinition of 
'struct DataType'" gemeldet

wär nett wenn ihr mir nochmal einen Tip geben könntet was ich falsch 
mache

Mirko

von Stefan E. (sternst)


Lesenswert?

In main.h:
#include "globals.h"
#include "A.h"       // in A.h wird auch globals.h eingebunden
#include "B.h"       // in B.h ebenso

Du bindest in main.h die globals.h gleich 3 mal ein, und das macht 
Probleme.

Die kannst du beseitigen, indem du den Inhalt von global.h wie folgt 
"klammerst":
1
#ifndef GLOBAL_H
2
#define GLOBAL_H
3
4
// hier der eigentliche Inhalt von global.h
5
6
#endif

von Mirko H. (Gast)


Lesenswert?

perfekt - danke dir

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.