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.197 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 30. Mai 2020, 18:11
Unser Anwendungen compilieren mittlerweile mit 10.4
Im Rahmen der Umstellung auch gemerkt das der Compiler auch einiges mehr an Warnungen und Hinweisen liefert.


Neu erkannt werden:
- Warnmeldung wenn eine FreeAndNil nit mit einem TObject ausgerufen wird (Speicheranforderung mit GetMem und Freigabe war mit FreeAndNil)
- Unnötig Variablenzuweisungen nach einem raise werden gemeldet. Diese Zeilen waren früher nötig da alte Compiler sonst fehlende Zuweisung als Warnung gemeldet haben
- Erkennung von "toden Code" nach einer exit-Anweisung. Auch in eigenen Code entdeckt . Wohl aus "braucht man den Code überhaupt noch. Mach ich mal ein exit rein ...
- Rückwärtige Erkennung von unnötigen Variablenzuweisungen.
So wurde an einer Stelle in Zeile x hingewiesen das Zuweisung nicht verwendet wurde.
Und dann auch noch das diese in Zeile x-1 das gleiche Problem vorliegt.

Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 30. Mai 2020, 19:03
Da wird doch wohl an einer Stelle zu viel Gewarnnt (bzw. Hinweis generiert).

Die Funktion IsWild aus der JVCL wird angemeckert.

Die repeat-Schleife mit den vielen continue und exit-Aufrufen verwirren wohl die neue dcc32-Exe.
Die letzte exit wird dann falsch interpretiert ...

Da mache ich wohl mal eine Jira-Eintrag auf: RSP-29274
Windows Vista - Eine neue Erfahrung in Fehlern.

Geändert von Bernhard Geyer (30. Mai 2020 um 19:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 30. Mai 2020, 19:41
- Erkennung von "toden Code" nach einer exit-Anweisung.
Hatte der Compiler den unnötigen Code vorher nicht auch schon weggelassen, so dass man es an den fehlenden blauen Punken sah? (weglassen ohne Meldung)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 31. Mai 2020, 11: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.453 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 31. Mai 2020, 12: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.197 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 31. Mai 2020, 12: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.453 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 31. Mai 2020, 13: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.197 Beiträge
 
Delphi 10.4 Sydney
 
#8

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

  Alt 31. Mai 2020, 17: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.453 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 31. Mai 2020, 18: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 12:22 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