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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.