Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Warnmeldungen falsch? (https://www.delphipraxis.net/113874-warnmeldungen-falsch.html)

Privateer3000 16. Mai 2008 08:09


Warnmeldungen falsch?
 
Schönen guten Morgen!

Ich habe 2 warnungen die IMHO nicht richtig sein können:
Delphi-Quellcode:
[Warnung] HAUPT.PAS(843): FOR-Schleifenvariable 'yxc' kann nach Durchlauf undefiniert sein
[Hinweis] HAUPT.PAS(758): Auf 'stdiff' zugewiesener Wert wird niemals benutzt
bei der ersten kann ich mir nicht vorstellen dass das richtig ist,
bei der zweiten wird der wert definitiv benutzt
Wie kommt die IDE darauf?

Grüße

Sharky 16. Mai 2008 08:12

Re: Warnmeldungen falsch?
 
Zitat:

Zitat von Privateer3000
... bei der ersten kann ich mir nicht vorstellen dass das richtig ist, ...

Hai Privateer3000,

es ist tatsächich so das die "Zählschleife" nur innerhalb der FOR-Schleife einen definierten Wert hat.
Delphi-Quellcode:
var
  blubb : integer;
begin
  for blubb := 1 to 10 do
  begin
  end;
  ShowMessage ('%d',[blubb]); // Hier würde man 10 erwarten muss aber nicht sein.
end;

RavenIV 16. Mai 2008 08:25

Re: Warnmeldungen falsch?
 
Zitat:

Zitat von Privateer3000
Ich habe 2 warnungen die IMHO nicht richtig sein können:

Wie wär's mit ein Wenig Quellcode?
So ist das nur ein Raten ins Blaue hinein.

Privateer3000 16. Mai 2008 08:32

Re: Warnmeldungen falsch?
 
Danke fürs antworten

Sorry das ich nicht den quellcode
mit gepostet habe, aber ich dachte
dass diese Meldungen einen eindeutigen
Zustand beschreiben.
Davon abgesehen wäre der auch viel zu lang
mit vielen verschachtelten Schleifen-daher wahrscheinlich auch
die Meldungen.
@Sharky
welche Konsequenz kann das haben,oder ist dies wirklich nur als Hinweis
zu verstehen?!

Phoenix 16. Mai 2008 08:57

Re: Warnmeldungen falsch?
 
Zitat:

Zitat von Privateer3000
welche Konsequenz kann das haben,oder ist dies wirklich nur als Hinweis
zu verstehen?!

Die Konsequenz kann sein: Du verlässt Dich darauf, dass am Ende der Schleife der letzte Schleifenwert in der Variablen steht und rechnest damit weiter.

In Wahrheit steht aber ein beliebiger Wert darin und verfälscht Dein Ergebnis.

Ergo: Die Warnung ist kein Hinweis sondern eine echte Warnung, und sie warnt Dich davor, falsche Ergebnisse zu produzieren.

Nuclear-Ping 16. Mai 2008 09:03

Re: Warnmeldungen falsch?
 
Zitat:

Zitat von Privateer3000
Davon abgesehen wäre der auch viel zu lang
mit vielen verschachtelten Schleifen-daher wahrscheinlich auch
die Meldungen.

Nur die relevanten Code-Stellen reichen. Der Compiler irrt sich bei ungenutzten Variablen idR nicht.

BUG 16. Mai 2008 09:17

Re: Warnmeldungen falsch?
 
Zitat:

Zitat von Sharky
es ist tatsächich so das die "Zählschleife" nur innerhalb der FOR-Schleife einen definierten Wert hat.

Das könnte evtl. doch auch an der Optimierung liegen.

MfG,
Bug

RavenIV 16. Mai 2008 09:28

Re: Warnmeldungen falsch?
 
Zitat:

Zitat von Sharky
es ist tatsächich so das die "Zählschleife" nur innerhalb der FOR-Schleife einen definierten Wert hat.

Das lernt man schon in der Schule (oder guten Büchern), dass man Zählvariablen niemals ausserhalb von Schliefen weiterverwenden soll.
Man "merkt" sich den Wert in einer anderen Variablen.

Privateer3000 16. Mai 2008 09:54

Re: Warnmeldungen falsch?
 
Zitat:

Zitat von RavenIV
Zitat:

Zitat von Sharky
es ist tatsächich so das die "Zählschleife" nur innerhalb der FOR-Schleife einen definierten Wert hat.

Man "merkt" sich den Wert in einer anderen Variablen.

Das wäre meine nächste Frage gewesen.
Aber in meinem Falle wird die variable zum schluss auf null geprüft,
bzw. folgt dem rowcount eines stringgrids.
Delphi-Quellcode:
[Warnung] HAUPT.PAS(843): FOR-Schleifenvariable 'yxc' kann nach Durchlauf undefiniert sein
zaer:=elist.rowcount;
for yxc:=1 to zaer-1 do begin

SirThornberry 16. Mai 2008 10:31

Re: Warnmeldungen falsch?
 
sobald dein rowcount < 2 ist wird die schleife kein einziges mal durchlaufen und die Schleifenvariable wird auch somit gar nicht erst initialisiert (wird ja nicht benötigt wenn die Schleife nicht durchlaufen werden muss)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.

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