![]() |
For-Schleife Rückwärts?
Hi,
in D7 beobachte ich im Debugger ein eigenartiges Verhalten:
Delphi-Quellcode:
Die Schleife wird nicht von 1 bis 11 (Wert von Const AnzRep) durchlaufen, sondern von 11 bis 1 - also eigentlich wie "AnzRep DOWNTO 1".
FOR i:=1 TO AnzRep DO
BEGIN Log.Lines.Add(Berichte[i]); [...] END; Muss man das verstehen? Es ist hier nicht kritisch, aber wenn die Reihenfolge der Berichte von Bedeutung wäre, hätte ich doch ein deutliches Problem... habe ich einen Schalter übersehen ("drehe alles um")? Gruß Mark |
Re: For-Schleife Rückwärts?
Hallo,
das ist die automatische Optimierung von Delphi. Wenn die Schleife rückwärts läuft, muss als Abbruchbedingung nur auf Null getestet werden, was schneller geht. Die Optimierung hat aber keine negativern Auswirkungen auf Deinen Code, das wird vom Compiler entsprechend angepasst. Gruß xaromz |
Re: For-Schleife Rückwärts?
Danke - sowas hatte ich vermutet... woher weiß Delphi denn, dass das nicht kritisch ist? In der Schleife rufe ich die Load- und Save-Methoden von Fastreport auf. Es könnte doch gut sein, dass ich die Reihenfolge der Reports fix haben möchte...
Gruß Mark |
Re: For-Schleife Rückwärts?
Hallo,
Zitat:
Delphi-Quellcode:
wird zu
for i := 1 to 10 do
Memo.Lines[i] := IntToStr(i);
Delphi-Quellcode:
Alles in Butter also.
for i := 9 downto 0 do
Memo.Lines[10 - i] := IntToStr(10 - i); Gruß xaromz |
Re: For-Schleife Rückwärts?
Ouch - das ist eine böse Falle... habe mir gerade den Debug-Output angeschaut und bemerkt, dass die Reihenfolge tatsächlich OK ist - geht man im Debugger auf "Berichte[i]" wird aber der falsche Bericht angezeigt (der ist dann gerade gar nicht dran). Also wohl besser Optimierung aus beim debuggen.
Gruß & vielen Dank! Mark |
Re: For-Schleife Rückwärts?
Zitat:
Kann man dieses "Feature" eigentlich abschalten, ohne auf die Optimierung zu verzichten ? |
Re: For-Schleife Rückwärts?
Ich glaube nicht, dass sich der logische Durchlauf einer Schleife durch diese Optimierung in irgendeiner Art ändert. Die Optimierung bezieht sich auf Geschwindigkeit und Codeeffizienz. In meiner ganzen Delphi-Zeit (vlt. 10 Jahre) konnte ich kein Problem durch "optimierte" For-Schleifen feststellen.
|
Re: For-Schleife Rückwärts?
Siehe dazu auch:
![]() |
Re: For-Schleife Rückwärts?
Daß der Debugger bei eingeschalteter Optimierung in manchen Schleifen spinnt, hat mir auch schon Kopfzerbrechen gekostet; inzwischen findet sich das z.B. hier in CodeGears Quality Central:
Report No: 33195 (RAID: unavailable) Status: Open Watches not working in optimized for loop ![]() |
Re: For-Schleife Rückwärts?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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