globale Variablen richtig einbinden

Gast #958104
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
Gast #958406
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
#958414
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.