![]() |
Delphi-Version: XE
For-Schleife: negative Anzahl Durchläufe
Hi,
ich "befürchte", ich kenne die Antwort auf die Frage, aber da sie mich doch sehr erstaunt hat, wollte ich nachfragen um sicherzugehen. Folgendes kleines Beispielprogramm:
Delphi-Quellcode:
Ich hätte jetzt erwartet (wie ich es so von Java, C etc. kenne), dass diese Schleife genau 0x durchlaufen wird, da Start > Ende.
var
i: Byte; x: integer; begin x := -1; for i := 0 to x do showmessage(inttostr(i)); Stattdessen habe ich mir aber eine Endlosschleife gebastelt (bzw. vllt. rettet der Byte-Überlauf mich irgendwann, soweit habe ich es aber nun nicht getestet). Ist das etwa as-designed? Oder habe ich einen Fehler irgendwo? Der Originalcode hatte eine solche Schleife:
Delphi-Quellcode:
wobei FPControl ein TPageControl mit potenziell 0 Pages ist.
for i := 0 to Pred(FPControl.PageCount) do
Ist also hier meine (einzige ?!) Rettung ein if davor? LG, Frederic |
AW: For-Schleife: negative Anzahl Durchläufe
Definier i doch nicht als Byte.
|
AW: For-Schleife: negative Anzahl Durchläufe
Hi,
ok, das löst das Problem - aber wieso?! Vielleicht ist es einfach schon zu spät, aber ich sehe es grad nicht. LG, Frederic |
AW: For-Schleife: negative Anzahl Durchläufe
Vielleicht wird dann alles nach Byte gecastet, keine Ahnung :) Kann mir da aber auch gut vorstellen, dass der Vergleich (also in ASM) dann irgendwie seltsam ist, auch wenn es nicht gecastet werden sollte.
Ist aber alles nur ins Blaue geraten. Aber bei zwei verschiedenen Typen bin ich da immer vorsichtig. Hatte neulich mal ein Problem mit Integer und Cardinal, weswegen da auch einiges schief lief. |
AW: For-Schleife: negative Anzahl Durchläufe
i ist ein Byte, x ist -1 -> macht als Byte $FF. Durchlauf der Schleife also bis 255.
|
AW: For-Schleife: negative Anzahl Durchläufe
Zitat:
|
AW: For-Schleife: negative Anzahl Durchläufe
Hi,
ok, das macht durchaus Sinn. Sowas doofes aber auch ;) Gut, Vertrauen in die For-Schleife wiederhergestellt. LG, Frederic |
AW: For-Schleife: negative Anzahl Durchläufe
Ich hätt jetzt ne Warning erwartet, aber da muckt der Compiler sich echt garnicht :shock:
Mit Range Checking allerdings wirfts dir zur Laufzeit eine Exception. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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