Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FOR-Schleifenvariable 'ti' kann nach Durchlauf undefiniert.. (https://www.delphipraxis.net/35015-schleifenvariable-ti-kann-nach-durchlauf-undefiniert.html)

alcaeus 1. Dez 2004 15:11

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Hallo Shaman,

eigentlich sollte es N sein.
Und wie ich bereits gesagt habe, bei mir wurde die Schleife einmal "umgedreht", warum auch immer :roll:

Greetz
alcaeus

Steve 1. Dez 2004 15:24

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Hi,

was ich eigentlich sagen wollte:

Delphi-Quellcode:
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
das bringt bei mir nie niemals nich ne Warnung vom Compiler, sondern erst, wenn eben nach Schleifendurchlauf was mit ti gemacht wird:
Delphi-Quellcode:
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
ShowMessage(IntToStr(i)); //<<--FOR-Schleifenvariable 'ti' kann ......
Aber das scheint ja schon gar nimmer das Prob zu sein :mrgreen:

Gruß
Stephan :dance: :xmas:

Shaman 1. Dez 2004 15:25

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Hoi

Gut, ob jetzt N oder N+1, hauptsache er ist definiert. :)
Das sie umgedreht ist, liegt an der Optimierung durch den Compiler. Sie sagen aber, dass das nur passiert, wenn es keine Rolle spielt, wie die Schleife durchlaufen wird. Das sollte also keine Probleme bereiten... hoffentlich :pale:

Gruss
Shaman

alcaeus 1. Dez 2004 15:27

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Zitat:

Zitat von Shaman
Das sie umgedreht ist, liegt an der Optimierung durch den Compiler. Sie sagen aber, dass das nur passiert, wenn es keine Rolle spielt, wie die Schleife durchlaufen wird. Das sollte also keine Probleme bereiten... hoffentlich :pale:

Doch, es spielt eine Rolle, und zwar wenn du dich darauf verlässt, dass die Schleife nicht umgedreht wird.

Nehmen wir als Beispiel diesen Code:
Delphi-Quellcode:
for i := 0 to 1000 do
  myarray[i] := 0;
myarray[i] := 1000;
Hier wird die Warnung erzeugt, weil die Schleife rückwärts durchlaufen werden kann, und der Wert von i somit nicht wie erwartet 1000 sondern 0 ist.

Greetz
alcaeus

Pseudemys Nelsoni 1. Dez 2004 15:31

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Zitat:

Zitat von Steve
Hi,

was ich eigentlich sagen wollte:

Delphi-Quellcode:
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
das bringt bei mir nie niemals nich ne Warnung vom Compiler, sondern erst, wenn eben nach Schleifendurchlauf was mit ti gemacht wird:
Delphi-Quellcode:
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
  for ti := 0 TO 5 DO
  begin
    bla;
  end;
ShowMessage(IntToStr(i)); //<<--FOR-Schleifenvariable 'ti' kann ......
Aber das scheint ja schon gar nimmer das Prob zu sein :mrgreen:

Gruß
Stephan :dance: :xmas:



naja die for-schleifen initialisieren "ti" doch aber... also undefiniert kanns nich sein oder?

Steve 1. Dez 2004 15:35

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Hi,

der Compiler sagt ja auch 'könnte' und nicht 'ist' :mrgreen:

Gruß
Stephan :dance: :xmas:

Shaman 1. Dez 2004 15:36

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Zitat:

Zitat von alcaeus
Hier wird die Warnung erzeugt, weil die Schleife rückwärts durchlaufen werden kann, und der Wert von i somit nicht wie erwartet 1000 sondern 0 ist.

Stimmt ja... :wall:
Gut, dass mir das jetzt klar ist :thumb:

Pseudemys Nelsoni 1. Dez 2004 16:52

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Zitat:

Zitat von Steve
Hi,

der Compiler sagt ja auch 'könnte' und nicht 'ist' :mrgreen:

Gruß
Stephan :dance: :xmas:


auch "könnte" ist falsch, die schleifen werden 100% ausgeführt, also kriegen sie auch nen wert.

DerDan 1. Dez 2004 17:12

Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
 
Also definiert ist eine Variable doch nur dann, wenn sie genau einen Vorhersagbaren Wert hat.

nach einer Schleife der Art

for ti := 0 to 5 do MachWas (Str[ti]);

MachWas (Str[ti]);


ist ti -1 oder 0 (je nach Compiler Version und wenn gedreht wurde)
oder 5 oder 6 (je nach Compiler Version und wenn nicht gedreht wurde)

das ist undefiniert genug oder?

bei delphi 1 z.B war ti nach der Schleife garantiert 5
bei delphi 7 ist ti nach der Schleife 6


und damit man sich nicht drauf verläßt kommt die warnung

weil bei Delphi 8,9,10 könnts ja wieder ganz anderst sein

DerDan


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz