AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi for Schleife -> Warnung

Ein Thema von kagi3624 · begonnen am 2. Mär 2020 · letzter Beitrag vom 2. Mär 2020
Antwort Antwort
Seite 1 von 2  1 2      
kagi3624

Registriert seit: 3. Feb 2020
138 Beiträge
 
Delphi 6 Enterprise
 
#1

Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 10:29
Delphi-Version: 6
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

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)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 10:33
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;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 10:38

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.
  Mit Zitat antworten Zitat
kagi3624

Registriert seit: 3. Feb 2020
138 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 10:44
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.

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.

Geändert von kagi3624 ( 2. Mär 2020 um 10:47 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 10:50
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 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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 11:01
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 = ...;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 11:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 11:24
Es ging ihm einfach darum wie man es richtig/ordentlich macht ohne eine Warnung zu bekommen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 11:26
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;

Geändert von DieDolly ( 2. Mär 2020 um 11:28 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#10

AW: Delphi for Schleife -> Warnung

  Alt 2. Mär 2020, 11:27
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 Uhr.
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