Variablen in einer Header Datei deklarieren

Gast #574602
Lesenswert?

Hallo zusammen.
Ich bin relativ neu dabei mit Controllern zu experimentieren. Nun habe 
ich die ein oder andere Sache schon programmiert und meine Apps werden 
größer.
Da ich aus Gründen der Übersichtlichkeit mehrere Source Code Files habe, 
aber in mehreren Files die selbern Variablen benötige hatte ich überlegt 
diese in einer Header Datei zu deklarieren und dieselbe überall 
einzubinden. Der Grund zu meiner Überlegung ist der das mir die 
Übersicht und die Lust abhanden kommt immer in mehreren Files Variablen 
als extern zu deklarieren.
Danke für Hilfestellungen und Anregungen!
Mfg Thomas
Gast #574613
Lesenswert?

Und ? wo ist da jetzt die Frage?

/Glaskugel on
Nehme mal an Du hast das gemacht, und bekommst vom Linker jede Menge 
Fehler...
/Glaskugel off

Mein vorschlag, ein "Globale" Haeder Datei nehmen die überall 
eingebunden wird (im Header der jeweiligen Datei), welche die Datei über 
extern(dafür ist das ja da) bekannt macht. Und an einer (sinnvollen) 
Stelle wird dann die Variable tatsächlich deklariert. Natürlich in einem 
c File. Variablendeklaration hat in einer Header Datei nix zu suchen...
#574615
Lesenswert?

Du könntest das z.B. so lösen:

global.h:
extern uint8_t GlobalVar;

global.c:
uint8_t GlobalVar;

modul_x.c:
#include "global.h"

void myFunc1(void){
  GlobalVar=5;
}

modul_y.c:
#include "global.h"

void myFunc2(void){
  if(GlobalVar>4)
    PORTB=255;
}

Ansich sollte natürlich versucht werden, die Module so "gekapselt" wie 
möglich zu gestalten und die Verwendung programmglobaler Variablen zu 
minimieren.

Gruß Frank
Gast #931847
Lesenswert?

Eine andere Möglichkeit wäre es, die Variablen als extern zu 
deklarieren.
Bei meinem Projekt wird z.B. eine Struktur vom Typ config in der Datei 
config.c deklariert. In allen anderen c-Dateinen, die diese Struktur 
benutzen, steht oben

extern configuration config;  // import global variable from main file

Der Linker löst das dann auf.

Johannes

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren