Variablen innerhalb eine Funktion

Gast #3398879
Lesenswert?

Hallo,

hab eine ganz grundlegende C-Frage: Hab eine Funktion, die öfter 
aufgerufen wird (ca alle 100µs), innerhalb dieser Funktion werden 
variablen definiert.
1
void funktion()
2
{
3
   int i = 0;
4
   bool j = false;
5
   .
6
   .
7
   .
8

9
}

Problemstellung: diese Variablen sollen bei jeden Aufruf mit 0 
initialisiert werden ( weil sie innerhalb der Funktion verändert 
werden).
So wie es oben geschrieben ist, werden die Variablen nun zu Beginn jedes 
Funktionsaufrufes auf Null gesetzt, aber wird dabei nicht auch immer 
eine neue Variable erzeugt??? Nach dieser Theorie sollte nach X 
Funktionsaufrufen der Speicher voll sein?!

Wenn ich sie als static deklariere, hab ich das Problem, dass sie nie 
wieder zurück auf 0 gesetz wird, oder?

Danke für eure Hilfe..
#3398890
Lesenswert?

Manuel schrieb:
> Hallo,
>
> hab eine ganz grundlegende C-Frage:

Dafür gibt es C-Bücher.
Da stehen noch viele andere Grundlagen drinnen.

> Hab eine Funktion, die öfter
> aufgerufen wird (ca alle 100µs), innerhalb dieser Funktion werden
> variablen definiert.

ja, soll vorkommen.

> Problemstellung: diese Variablen sollen bei jeden Aufruf mit 0
> initialisiert werden ( weil sie innerhalb der Funktion verändert
> werden).

ja, ist ok.

> So wie es oben geschrieben ist, werden die Variablen nun zu Beginn jedes
> Funktionsaufrufes auf Null gesetzt,

genau das hast du programmiert.

> aber wird dabei nicht auch immer
> eine neue Variable erzeugt???

Ja und Nein.
Denn nachdem die Funktion fertig ist, werden die Variablen wieder 
zerstört.

> Nach dieser Theorie sollte nach X
> Funktionsaufrufen der Speicher voll sein?!

Nö.
Denn beim Verlassen der Funktion werden diese Variablen ja wieder 
zerstört.

> Wenn ich sie als static deklariere, hab ich das Problem, dass sie nie
> wieder zurück auf 0 gesetz wird, oder?

Richtig.
Dann wirst du sie wohl händisch mit einer Zuweisung auf dir genehme 
Werte zurücksetzen müssen.
Das folgt aber eigentlich recht klar daraus, wie static Variablen 
verwaltet werdenm, bzw. was eine Initialisierung eigentlich ist und was 
sie von einer Zuweisung unterscheidet.
Moderator Persönliche Seite #3399124
Lesenswert?

cyblord ---- schrieb:
> Die (lokalen) Variablen werden nur auf dem Stack angelegt

Nur, wenn der Prozessor zu wenig Register hat. ;-)

Bei Prozessoren mit ausreichend vielen Registern (also so ziemlich
alles außer x86 :) sehen die lokalen Variablen oft genug den Speicher
gar nicht, sondern verbleiben gleich komplett in Registern.

Was gar nicht benutzt wird (beispielsweise in Teilen des Codes), legt
der Compiler gar nicht erst an.  Also bei:
1
void foo(bool x)
2
{
3
  int i;
4
  char j;
5

6
  if (x) {
7
    i = 42;
8
    // ...
9
  } else {
10
    j = 'B';
11
    // ...
12
  }
13
}

werden i und j nie gleichzeitig gebraucht; folglich kann jede der beiden
Variablen mit dem gleichen Register auskommen (oder der gleichen
Speicherstelle).

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