AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise

Ein Thema von Bernhard Geyer · begonnen am 30. Mai 2020 · letzter Beitrag vom 31. Mai 2020
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.234 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise

  Alt 31. Mai 2020, 10:48
Hier eine Vereinfachte Variante der IsWild-Funktion bei der klarer wird wieso hier der Compiler mit der Warnung irrt
Der Continue-Bereich ist hier das Problem, welche dafür sorgt das die zwei Zeilen
Delphi-Quellcode:
    Result := False;
    Exit;
auch übersprungen werden können.
Delphi-Quellcode:
function IsTest: Boolean;
var
  v1, v2: Integer;
begin
  v1 := 0;
  v2 := 5;
  repeat
    if v1 < v2 then
    begin
      Result := true;
      inc(v1);
      continue;
    end;

    Result := False;
    Exit;
  until v1 >= v2;

  if v1 > v2 then
    result := False;

  if v1 < v2 then
    result := False;
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.782 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise

  Alt 31. Mai 2020, 11:16
So ganz kann ich da noch nicht folgen. Wenn ich das (ohne Test) richtig interpretiere, wird das continue für v1 = 0..4 aufgerufen, aber bei v1 = 5 schlägt das Exit mit einem Result := False zu.

Ich bekomme jetzt drei Warnungen, daß die drei anderen Zuweisungen an Result niemals benutzt werden. Aber das stimmt doch auch, oder?

Das continue springt zurück zum repeat ohne das until auszuwerten, dann landet man entweder wieder beim continue oder beim Exit .

Entweder landet man in einer endlosen continue -Schleife oder kommt zwingend zum Exit . In jedem Fall ist das Result := true vor dem continue obsolet.

Die beiden anderen Zuweisungen nach dem until sind ebenso überflüssig, da die Schleife nur durch das Exit verlassen werden kann.

Übersehe ich da was?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.234 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise

  Alt 31. Mai 2020, 11:43
Nein, Bei Continue wird die nächste Schleifendurchgang ausgeführt, nachdem die until-Condition geprüft wird.
ich glaube das ist ein allgemeines Mißverständnis wie das continue wirkt.
Einfach mal mit dem Debugger durchlaufen lassen. Er springt kurz an die until-Zeile bevor er beim repeat weiter macht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.782 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise

  Alt 31. Mai 2020, 12:29
Nein, Bei Continue wird die nächste Schleifendurchgang ausgeführt, nachdem die until-Condition geprüft wird.
ich glaube das ist ein allgemeines Mißverständnis wie das continue wirkt.
Einfach mal mit dem Debugger durchlaufen lassen. Er springt kurz an die until-Zeile bevor er beim repeat weiter macht.
Ja, die Dokumentation ist da wohl nicht so ganz eindeutig:
Zitat:
Continue fährt mit der nächsten Iteration fort.
Auch nicht in Englisch:
Zitat:
while Continue begins executing the next iteration of the sequence.
Das ist ganz besonders missverständlich, da etwas später steht:
Zitat:
The repeat statement executes its sequence of constituent statements continually, testing expression after each iteration.
Wenn continue wirklich die nächste Iteration starten würde, kann man das so interpretieren, daß die Überprüfung damit übersprungen wird. Dem ist aber offenbar nicht so.

Ich denke, das Verhalten sollte dort genauer beschrieben werden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.234 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise

  Alt 31. Mai 2020, 16:55
Ich denke auch das die Doku hier das besser beschreiben sollte.

Wollte auch erst im Code den ich aus der RXLib übernommen hatte die letzten beiden Zeilen aufgrund der Meldung löschen.
Der Unit-Test hat mich eines besseren belehrt und danach hat ich erstmal den Debugger Zeilenweise durchlaufen lassen.
Dann war es mehr als eindeutig was genau abläuft.

Würde continue ohne Prüfung der Abbruchbedingung durchlaufen würde es in einigen Implementierung sporatische Deadlocks geben ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.782 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise

  Alt 31. Mai 2020, 17:15
Ich plädiere für eine Adaption der C++ Hilfe. Die ist da wesentlich präziser:
Zitat:
Die Anweisung continue wird innerhalb von Schleifen benutzt, um die Steuerung an das Ende der innersten Schleife zu übergeben, die zu dem Schleifenkonstrukt (z.B. for oder while) gehört. An diesem Punkt wird dann die Fortsetzungsbedingung der Schleife erneut geprüft.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:38 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