Frage zu Deklaration und Definition



  • Hi Leute,

    wenn ich folgendes in meinem Code schreibe:

    long i;
    for (i=0;i<20;i++)
    {
    long h = 0;
    h + 10;
    }
    

    Wird h dann jedes mal auf 0 gesetzt oder nur beim ersten Schleifendurchlauf?
    "Darf" man sowas überhaupt schreiben? Oder ist das vielleicht "unsauber" oder nicht definiertes Verhalten?

    Gruß
    Scarabol



  • Na überleg mal, du definierst bei jedem Schleifendurchlauf die Variable h neu.Somit wird sich auch immer wieder auf 0 gesetzt.



  • Wird jedesmal neu erzeugt und auf 0 gesetzt (irgendwelche eventuellen Optimierungen lassen wir jetzt mal außer Acht). Umgehen könntest du das übrigens mit static.

    P.S.: In der letzten Zeile passiert nix. Du führst zwar eine Rechenoperation aus, das Ergebnis wird aber keiner Variable zugewiesen. Du meintest vermutlich

    h+=10;
    


  • Wird h denn auch am Ende der Schleife freigegeben?

    Ja, richtig ich meinte +=, danke

    Gruß
    Scarabol



  • Wird h denn auch am Ende der Schleife freigegeben?

    Nein. Bei jedem Durchgang wird dein h erzeugt und danach gerade wieder freigegeben.

    Umgehen könntest du das übrigens mit static.

    Das ist technisch möglich, macht aber überhaupt keinen Sinn und ich finde, Anfänger sollten damit verschont bleiben.

    Simon



  • theta schrieb:

    Umgehen könntest du das übrigens mit static.

    Das ist technisch möglich, macht aber überhaupt keinen Sinn und ich finde, Anfänger sollten damit verschont bleiben.

    Na ja, im konkreten Beispiel macht static natürlich wenig Sinn, zugegeben. Aber es gibt ja durchaus Fälle, wo das anders aussieht, daher fand ich es erwähnenswert. 🙂



  • Scarabol schrieb:

    Wird h denn auch am Ende der Schleife freigegeben?

    Stackvariablen werden immer am Ende des Gültigkeitsbereichs, also bei schliessender geschweifter Klammer, zerstört. Das heisst, eine Variable, die innerhalb des Schleifenrumpfs deklariert ist, wird bei jedem Durchgang neu erstellt (von irgendwelchen Optimierungen mal abgesehen).


Anmelden zum Antworten