Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi For-Schleife: negative Anzahl Durchläufe (https://www.delphipraxis.net/159019-schleife-negative-anzahl-durchlaeufe.html)

fkerber 11. Mär 2011 00:52

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:
var
  i: Byte;
  x: integer;
begin
  x := -1;
  for i := 0 to x do
    showmessage(inttostr(i));
Ich hätte jetzt erwartet (wie ich es so von Java, C etc. kenne), dass diese Schleife genau 0x durchlaufen wird, da Start > Ende.
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:
for i := 0 to Pred(FPControl.PageCount) do
wobei FPControl ein TPageControl mit potenziell 0 Pages ist.
Ist also hier meine (einzige ?!) Rettung ein if davor?


LG, Frederic

s.h.a.r.k 11. Mär 2011 00:54

AW: For-Schleife: negative Anzahl Durchläufe
 
Definier i doch nicht als Byte.

fkerber 11. Mär 2011 00:56

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

s.h.a.r.k 11. Mär 2011 00:59

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.

Thom 11. Mär 2011 01:01

AW: For-Schleife: negative Anzahl Durchläufe
 
i ist ein Byte, x ist -1 -> macht als Byte $FF. Durchlauf der Schleife also bis 255.

s.h.a.r.k 11. Mär 2011 01:03

AW: For-Schleife: negative Anzahl Durchläufe
 
Zitat:

Zitat von Thom (Beitrag 1087563)
i ist ein Byte, x ist -1 -> macht als Byte $FF. Durchlauf der Schleife also bis 255.

Jup, dem ist wahrlich so :thumb: Habs gerade mal gestestet.

fkerber 11. Mär 2011 01:04

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

Stevie 16. Mär 2011 00:18

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 11:16 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