![]() |
Compiler optimiert nicht richtig
Hallo,
ich habe ein komisches Problem mit dem Compiler. Und zwar wird bei folgendem Code einiges wegoptimiert:
Delphi-Quellcode:
Kann ich mir irgendwo eine "Begründung" her holen? Oder hatte schonmal jemand ähnliche Probleme?
for i := 0 to FEngine.FList.Count - 1 do
begin FEngine.FList[i].Collision2; FEngine.CollisionDone := true; if FEngine.CollisionDone then begin break; <--- Diese Zeile wird nicht compiliert end; end; CollisionDone ist ein Property und folgendermaßen Deklariert:
Delphi-Quellcode:
Danke für eure Hilfe,
property CollisionDone:boolean read FCollisionDone write FCollisionDone;
Igel457 |
Re: Compiler optimiert nicht richtig
Was soll die Zeile denn bewirken?
Also jetzt konkret auf das Programm bezogen? Irgendwie verstehe ich den Sinn der ganzen Sache noch nicht so.. |
Re: Compiler optimiert nicht richtig
Zitat:
Delphi-Quellcode:
Das steht da:
for i := 0 to FEngine.FList.Count - 1 do
begin FEngine.FList[i].Collision2; FEngine.CollisionDone := true; if FEngine.CollisionDone then begin break; <--- Diese Zeile wird nicht compiliert end; end;
Delphi-Quellcode:
btw: Warum benutzt du überall die Felder direkt? Eine property, die mit dem Feld als read-clause deklariert wird, hat keinerlei Overhead gegenüber dem Feld direkt.
if Engine.List.Count > 0 then
begin Engine.List[0].Collision2; Engine.CollisionDone := true; end; Aber auf der anderen Seite hast du später die Möglichkeit den Getter zu ändern. Außerdem sehen die ganzen FXXX furchtbar hässlich aus. ;) |
Re: Compiler optimiert nicht richtig
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich suche jetzt schon seit Stunden nach dem Fehler... Mit der direkten verwendung der Felder kommt das noch vom DelphiX. Ich habs umgeändert... |
Re: Compiler optimiert nicht richtig
Das wird wegoptimiert, weil der Fall nie eintritt. Ganz einfach deshalb weil du direkt vor der Abfrage selbst dafür sorgst, dass es immer true ist. Genauso, wie Elvis das schon geschrieben hat.
|
Re: Compiler optimiert nicht richtig
Diese Zeile mit dem True habe ich nur zum Testen hinzugefügt.
Allerdings funktioniert es Anscheinend doch richtig (also auch ohne dieses CollisionDone = true), obwohl die Zeile nie Ausgeführt wird. :gruebel: Der Fehler den ich habe scheint doch wo anders her zu kommen... Ich wollte halt einen Haltepunkt auf diese Zeile setzen und war geschockt als ich gesehen habe, dass diese nicht ausgeführt wird. |
Re: Compiler optimiert nicht richtig
Zitat:
Und ein Rebuild anstatt einem Recompile wirkt manchmal wahre Wunder. Besonders nach Änderung der Compiler-Optionen ist es zwingend notwendig einen Rebuild aller Dateien zu machen, die davon betroffen sind. Optimierungen ausschalten und dann F9 oder Ctrl F9 drücken ist also 'ne Luftnummer. :zwinker: Die Optimierungen des Compilers sind normalerweise nicht destruktiv, soll heißen er ändert nicht wirklich etwas an deinem Programmfluss, er wirft nur Dinge raus, die unnötig sind, fasst Operationen zusammen oder ändert die Reihenfolge von Operationen wenn es keinen Einfluss auf das Programm hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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