![]() |
Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
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 :shock:. 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. :thumb: |
AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
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: ![]() |
AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
Zitat:
|
AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
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:
auch übersprungen werden können.
Result := False;
Exit;
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; |
AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
So ganz kann ich da noch nicht folgen. Wenn ich das (ohne Test) richtig interpretiere, wird das
Delphi-Quellcode:
für v1 = 0..4 aufgerufen, aber bei v1 = 5 schlägt das
continue
Delphi-Quellcode:
mit einem
Exit
Delphi-Quellcode:
zu.
Result := False
Ich bekomme jetzt drei Warnungen, daß die drei anderen Zuweisungen an Result niemals benutzt werden. Aber das stimmt doch auch, oder? Das
Delphi-Quellcode:
springt zurück zum
continue
Delphi-Quellcode:
ohne das
repeat
Delphi-Quellcode:
auszuwerten, dann landet man entweder wieder beim
until
Delphi-Quellcode:
oder beim
continue
Delphi-Quellcode:
.
Exit
Entweder landet man in einer endlosen
Delphi-Quellcode:
-Schleife oder kommt zwingend zum
continue
Delphi-Quellcode:
. In jedem Fall ist das
Exit
Delphi-Quellcode:
vor dem
Result := true
Delphi-Quellcode:
obsolet.
continue
Die beiden anderen Zuweisungen nach dem
Delphi-Quellcode:
sind ebenso überflüssig, da die Schleife nur durch das
until
Delphi-Quellcode:
verlassen werden kann.
Exit
Übersehe ich da was? |
AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
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. |
AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
Zitat:
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
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.
continue
Ich denke, das Verhalten sollte dort genauer beschrieben werden. |
AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
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 ... |
AW: Delphi "Sydney" (10.4) - mehr Compilerwarnungen und Hinweise
Ich plädiere für eine Adaption der C++ Hilfe. Die ist da wesentlich präziser:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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