-         

Ergebnis 1 bis 3 von 3

Thema: Variablendeklaration in for (...)

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987

    Variablendeklaration in for (...)

    Anzeige

    Moin.

    Angenommen, man hat dieses Konstrukt in einer anderen Funktion:
    Code:
    void Funktion1(void)
    {
      for (x = 0; x < 10 ; x++)
      {
        ui8_t* y = Funktion2(x);
      }
    }
    Bei mir hiess es "damals", dass lokale Variablen in for-Schleifen & Co. nix zu suchen haben, sondern dass diese am Anfang der Funktion vor dem ersten Befehl deklariert werden müssen.
    (Gcc scheint das egal zu sein, µVision meckert bei sowas aber kräftig rum)
    Was genau hat diese Zeile in der for-Schleife für eine Wirkung?
    Wird da y jedes Mal überschrieben? Oder wird da bei jedem Durchlauf ein neues y angelegt?
    Was bezweckt man mit sowas?

    mfG
    #ifndef MfG
    #define MfG

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.07.2009
    Ort
    Wien
    Beiträge
    131
    ob das geht, hängt m.w. vom unterstützten C-standard ab, aber da bin ich nicht so der auskenner.

    der effekt ist aber, daß y auf den scope begrenzt ist, in dem es definiert ist, dh. außerhalb der for-schleife existiert es schlicht und einfach nicht, und beim nächsten schleifendurchlauf hast du quasi die nächste inkarnation davon.

    in deinem beispiel ist es also so, daß der wert von y sofort wieder "vergessen" wird. beim nächsten durchlauf wird ein neues y angelegt; das heißt konkret (je nach implementation, optimierungseinstellungen etc), daß auf dem stack speicher reserviert wird oder ein register verwendet wird; höchstwahrscheinlich in jedem schleifendurchlauf dasselbe, dh es wird vermutlich im nächsten schleifendurchlauf der alte wert wieder auftauchen, aber wenn du dich darauf verläßt, hast du es verdient, daß dein programm unreproduzierbar abstürzt und du ein paar nachschichten zum debuggen brauchst

    cm.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Also, wie cmock schon sagte, gilt die Variable nur innerhalb der Schleife, aber es kommt hinzu, dass der gesamte Overhead zum Anlegen einer Variable in jedem Durchlauf hinzukommt. Und die Wahrscheinlichkeit, dass y (und damit meine ich den Zeiger) dann immer an der selben Speicherstelle liegt, ist sehr hoch.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •