Deklaration mehrfach ausgeführt: Was passiert da?
-
ZubX schrieb:
mir geht es darum was beim zweiten Ausführen der "int i" Anweisung passiert.
bei jedem schleifendurchlauf bekommst du ein neues 'i'.
das vorherige 'i' existiert dann nicht mehr...
-
i wird beim eintritt in die schleife auf dem stack angelegt (genauer: platz reserviert) und am ende der schleife wieder von dort gelöscht. in den meisten fällen dürfte diese stackposition (rein zufällig) immer an der selben physikalischen stelle im speicher stehen, weshalb i erhalten bleiben könnte.
wenn du dich darauf verlässt, bist du ein mieser programmierer.
-
Ernstmal vielen Dank
Das mit dem Stack wollte ich höhren: Wird die Variable bei jedem Schleifendurchgang vom Stack heruntergenommen und dann wieder draufgelegt?
-
wird wohl systemabhängig sein
-
LordJaxom schrieb:
Weiterhin dürfte in dieser Zeile garnichts passieren, solange keine Initialisierung ergänzt wird.
wenn die variable zwar initialisiert, aber niemals verwendet wird, wird auch nichts passieren (es sei denn man schreibt 'volatile' davor).
-
Dann definiere ich sie lieber ausserhalb. Vielen Dank Euch allen
-
vista schrieb:
wenn die variable zwar initialisiert, aber niemals verwendet wird, wird auch nichts passieren (es sei denn man schreibt 'volatile' davor).
Selbst wenn die Variable initialisiert und verwendet wird, kann der Compiler sie noch aus dem Speicher rausoptimieren - aber das sind Spitzfindigkeiten, da es hierbei wohl um das Verhalten "nach aussen" geht, und man annehmen kann dass keine Threads parallel in dem Speicher rumwursten
-
LordJaxom schrieb:
Selbst wenn die Variable initialisiert und verwendet wird, kann der Compiler sie noch aus dem Speicher rausoptimieren
richtig.
das habe sich schon oft erlebt.
-
ZubX schrieb:
while (1) { int i; }
sollte man bei ansi c nicht alles davor deklarieren oO ?
-
Ab C99 geht das so wunderbar.
-
Am Anfang eines Scopes (sprich: nach "{") geht das auch in C89 wunderbar. Ab C99 sogar mittendrin.
-
Stimmt natürlich. Ich Idiot ich.