Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi for Schleife -> Warnung (https://www.delphipraxis.net/203580-delphi-schleife-warnung.html)

kagi3624 2. Mär 2020 09:29

Delphi-Version: 6

Delphi for Schleife -> Warnung
 
Hallo, weil ich meine liste in Segmenten durchlaufen muss, weise ich der Indexvariable den Startwert außerhalb, um überhaupt den Code kompelieren zu können musste ich die Variable sich selbst zuweisen :roll:

Code:
t := 0;
j := 100;
for t := t to j do begin
 //iwas...
end;
Der Code macht das, was es machen soll, allerdings kommt eine Warnung

Code:
[Warnung] frmAnalysis.pas(1039): FOR-Schleifenvariable 't' kann nach Durchlauf undefiniert sein
Wie sieht denn die richtige Schreibweise für so eine for-Schleife bzw. gibt es sie überhaupt? Bei C++ soll man ja das t da einfach weglassen aber das führt bei Delphi zu einer Fehlermeldung beim kompilieren

Code:
t=0;
for(; t<=100; ++t)

Neutral General 2. Mär 2020 09:33

AW: Delphi for Schleife -> Warnung
 
Also wenn ich sowas mache, nutze ich immer eine 2. Variable. Hab deine Variante ehrlich gesagt noch nie ausprobiert.
Delphi-Quellcode:
start := 100;
for i:= start to ende do
begin

end;

Lemmy 2. Mär 2020 09:38

AW: Delphi for Schleife -> Warnung
 
Zitat:

Zitat von kagi3624 (Beitrag 1458727)

Der Code macht das, was es machen soll, allerdings kommt eine Warnung

Code:
[Warnung] frmAnalysis.pas(1039): FOR-Schleifenvariable 't' kann nach Durchlauf undefiniert sein

Die Warnung sagt genau das was das Problem ist: t ist nach dem Durchlauf undefiniert (kann undefiniert sein) - und Du verwendest T NACH der Schleife.

kagi3624 2. Mär 2020 09:44

AW: Delphi for Schleife -> Warnung
 
Zitat:

Zitat von Lemmy (Beitrag 1458729)
Die Warnung sagt genau das was das Problem ist: t ist nach dem Durchlauf undefiniert (kann undefiniert sein) - und Du verwendest T NACH der Schleife.

Das ist mir schon klar, meine Frage ist, ob es eine Möglichkeit gibt das t wegzulassen, so dass es als global angesehen wird.

Zitat:

Zitat von Neutral General (Beitrag 1458728)
Also wenn ich sowas mache, nutze ich immer eine 2. Variable. Hab deine Variante ehrlich gesagt noch nie ausprobiert.

Danke, das kam mir überhaupt nicht in den Sinn.

Der schöne Günther 2. Mär 2020 09:50

AW: Delphi for Schleife -> Warnung
 
Dein Problem ist nicht die For-Schleife, sondern dass du danach auf die Zählervariable zugreifst und das ist nicht erlaubt wenn man die Schleife nicht aktiv verlassen hat (z.B. mit
Delphi-Quellcode:
break
).

Beispiel:
Delphi-Quellcode:
procedure p();
var
   x, y: Integer;
begin
   x := 0;
   y := 5;
   for x := x to y do
      WriteLn(x);

   WriteLn('Last value: ', x);
end;
Ergibt:
Code:
0
1
2
3
4
5
Last value: 6
x ist nach der Schleife 6 obwohl du gar nicht bis 6 gezählt hast. Davor warnt dich der Compiler und er hat Recht. Wenn du x nach der Schleife nochmal verwenden willst solltest du dir den letzten Wert entweder in einer zusätzlichen Variable merken oder die Schleife aktiv verlassen.

Beispiel:
Delphi-Quellcode:
procedure p();
var
   x, y: Integer;
begin
   x := 0;
   y := 5;
   for x := x to y do
      begin
         WriteLn(x);
         if(x = y) then
            Break;
      end;
   WriteLn('Last value: ', x);
end;

himitsu 2. Mär 2020 10:01

AW: Delphi for Schleife -> Warnung
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1458732)
x ist nach der Schleife 6 obwohl du gar nicht bis 6 gezählt hast.

X kann nachher auch 0 sein, falls der Compiler der Meinung war, dass es "intern" rückwärts für ihn besser sei.

Man kann die Schleifenvariable danach aber auch problemlos weiter benutzen, wenn man sie vorher eben initialisiert.

Delphi-Quellcode:
X := 123;
if X = ...;

for X in 0 do 3000 do begin
  ...
end;

X := 789;
if X = ...;

Der schöne Günther 2. Mär 2020 10:21

AW: Delphi for Schleife -> Warnung
 
Dann ist es aber keine Schleifenvariable mehr, sondern eine recyclete Variable mit irgendwas. Ich denke es ging ihm darum den Wert des letzten Durchlaufs zu behalten.

Neutral General 2. Mär 2020 10:24

AW: Delphi for Schleife -> Warnung
 
Es ging ihm einfach darum wie man es richtig/ordentlich macht ohne eine Warnung zu bekommen.

DieDolly 2. Mär 2020 10:26

AW: Delphi for Schleife -> Warnung
 
Ich würde es wegen der besseren Lesbarkeit so machen. Das gibt auch keine Compiler-Warnung.

Delphi-Quellcode:
var
 j: Integer;
begin
 j := 0;
 repeat
  if j = N then // falls man eine Kondition braucht
   Break;

  // ...

  Inc(j);
 until j = 100;
end;

bcvs 2. Mär 2020 10:27

AW: Delphi for Schleife -> Warnung
 
Oder eine while - Schleife benutzen, wenn man volle Kontrolle über die Schleifenvariable haben will:

Delphi-Quellcode:
t := 0;
j := 100;
while t <= j do begin
 //iwas...
 inc(t);
end;
Dabei nur das inc nicht vergessen. Das ist gerne mein Standardfehler, und dann wundere ich mich über die Endlosschleife.:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Seite 1 von 2  1 2      

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