Forum: Compiler & IDEs Globale Variablen in Header-Datei?


von TechInfo (Gast)


Lesenswert?

Hallo,

werden globale Variablen, die nur für ein Modul gültig sind, in die 
Header-Datei oder die .c-Datei des Moduls gesteckt?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

"Globale Variablen, die nur für ein Modul gültig sind" - Könnte es sein, 
daß Du Variablen meinst, die allen Funktionen innerhalb eines Moduls 
zugänglich sein sollen, aber Funktionen außerhalb des Modules 
verborgen bleiben sollen?

Das sind keine globalen Variablen, sondern statische Variablen, die 
außerhalb von Funktionen deklariert/definiert werden.

Sie gehören nicht in eine Headerdatei, sondern in die C-Sourcedatei des 
Modules.

von Karl H. (kbuchegg)


Lesenswert?

> Das sind keine globalen Variablen, sondern statische Variablen, die
> außerhalb von Funktionen deklariert/definiert werden.
>
> Sie gehören nicht in eine Headerdatei, sondern in die C-Sourcedatei des
> Modules.

Das mag jetzt ev. ein bischen untergegangen sein:
Sie werden als 'static' definiert.
Genauso wie Funktionen, die nur innerhalb dieses Moduls
sichtbar sein sollen.


xyz.c
*****
1
#include <xyz.h>
2
3
static int i;      // dieses i ist nur innerhalb dieser *.c
4
                   // bekannt. Man kann es auch mit einem 'extern'
5
                   // nicht von aussen referenzieren
6
7
static void foo(); // Eine Hilfsfunktion, die nur fuer dieses *.c
8
                   // existiert. Von aussen ist diese Funktion nicht
9
                   // sichtbar und auch nicht aufrufbar. Daraus
10
                   // folgt aber auch, dass ein anderes *.c eine
11
                   // eigene Funktion foo() haben könnte, ohne
12
                   // das es zu Problemen kommt

Halte dich an die einfache Regel:
In das Header File kommt alles, was ein potentieller Aufrufer
wissen muss, um Funktionen aus dem zugehörigen Source Code File
aufrufen zu können. Alles andere, was ausser dem Source
Code File niemanden was angeht, kommt ins Source Code File
und wird so abgeschottet, dass es ausserhalb nicht sichtbar ist.


von TechInfo (Gast)


Lesenswert?

Ah danke.

Kannte static bisher nur für lokale Variablen, insofern dass die lokale 
Variable dann nicht bei jedem Funktionsaufruf neu initialisiert wird.

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.