Forum: Mikrocontroller und Digitale Elektronik Verständnisproblem bei static Variablen


von Olaf der kleine (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Veständnisproblem bei static Variablen.

Es geht darum, innerhalb einer Funktion eine lokale Variable als static 
zu deklarieren.

Annahme:

Ich hab eine Modul mit mehreren void-Funktionen die irgendetwas machen.

Die Static-Variable kann nur innerhalb dieses Moduls verwendet werden. 
Von außen ist sie ja "unsichtbar".

Gleichzeit erfolgt die Initialisierung nur einmal, d.h. sie behält ihre 
Werte im Gedächtnis.


Das würde aber doch in folgendem Beispiel dazu führen, daß die Variable 
irgendwann überläuft. Ist das richtig ?


void test1(void)
{
  static unsigned int var = 0;
  var++;
}


void test2(void)
{
  static unsigend int var = 0;
  var++;
}


void test3(void)
{
  static unsigned int var = 0;
  var ++;
}


Rein theoretisch würde doch die Variable nie wieder auf 0 initialisiert 
werden, sondern nur einmal von der Funktion, die am ersten aufgerufen 
worden ist, und danac würe var immer nur inkrementiert werden. Richtig ?

Danke
Olaf

von Karl H. (kbuchegg)


Lesenswert?

Olaf der kleine schrieb:

> Annahme:
>
> Ich hab eine Modul mit mehreren void-Funktionen die irgendetwas machen.
>
> Die Static-Variable kann nur innerhalb dieses Moduls verwendet werden.
> Von außen ist sie ja "unsichtbar".

AUfpassen.

Dein Beispiel hat 3(!) voneinander unabhängige Variablen, die alle 'var' 
heißen. Die haben nichts miteinander zu tun!

> Das würde aber doch in folgendem Beispiel dazu führen, daß die Variable
> irgendwann überläuft. Ist das richtig ?

Nichts desto trotz kann natürlich jede einzelne von ihnen überlaufen, 
wenn 'ihre' Funktion entsprechend oft aufgerufen wird.

von akaDem (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Dein Beispiel hat 3(!) voneinander unabhängige Variablen, die alle 'var'
> heißen. Die haben nichts miteinander zu tun!

Stimmt.
@Olaf: Schau dir mal das Thema "Scope" beim Programmieren an.

von Ralph (Gast)


Lesenswert?


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.