mikrocontroller.net

Forum: Compiler & IDEs globale Variablen richtig einbinden


Autor: Mirko H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Mirko H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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":
#ifndef GLOBAL_H
#define GLOBAL_H

// hier der eigentliche Inhalt von global.h

#endif

Autor: Mirko H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
perfekt - danke dir

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.