![]() |
for to do: 0 to -1
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Community,
Ich habe ein sehr merkwürdiges Verhalten in einer meiner for-Schleife gefunden (s. Anhang). Nach meinen Informationen sollte die Schleife überhaupt nicht ausgeführt werden: Zitat:
mfg Nogge |
Re: for to do: 0 to -1
Von was für einem Typ ist V?
...:cat:... |
Re: for to do: 0 to -1
Ah, ok. *schäm*
"v" ist vom Typ Byte, der natürlich gar keine negativen Werte annehmen kann... Vielen Dank, sakura. |
Re: for to do: 0 to -1
Zitat:
...:cat:... |
Re: for to do: 0 to -1
Glückwunsch,
das ist der älteste Fehler. Ich vermute mal, du hast natürlich nicht die Bereichsprüfung an, oder? Dann würde dir der Compiler auch mehr helfen. Naja, wie dem auch sei. Deine Variable REMPILLAR = 0 und da du noch einen abziehst, würde dort eigentlich -1 rauskommen. Da im Datentyp Byte die -1 als 255 dargstellt wird, läufte deine Schleife von 0 bis 255. Wie gesagt mit einer Bereichsprüfung wird diese Geschichte auch geprüft! Also entweder immer Integer für die Laufvariable benutzen (was blödsinn ist) oder nie den Endbereich mit -1 verändern, sondern in der Schleife bei der Verwendung der Laufvariablen einen abziehen. MfG Thorsten |
Re: for to do: 0 to -1
Zitat:
Und wenn ein Programm richtig/fehlerlos programmiert ist, dann ist dieses auch total sinnlos. Zitat:
also statt nur einmal im Rumpf der Schleife etwas abzuziehen, soll man das jetzt also (unter Umständen) mehrmals innerhalb der Schleife machen? Es ist doch viel besser gleich die Ursache zu beheben? Also entweder die Datentypen anpassen, oder nur eine winzige Prüfung selber einzufügen
Delphi-Quellcode:
Hier wird auf größer 0 geprüft, da es einen optimaleren Code erzeugt.
if REMPILLAR > 0 then
for v := 0 to (REMPILLAR - 1) do ... eigentlich natürlich if REMPILLAR >= 1 then, also größer/gleich der Wert, welcher Abgezogen wird. |
Re: for to do: 0 to -1
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
wenn man die -1 weglässt.
for v := 0 to REMPILLAR do
Man kann das sehen, wie man will. Und nun könnt ihr (z.B. Luckie) mich wieder in der Luft zerreissen... |
Re: for to do: 0 to -1
Zitat:
Einmal die andere Schleife zum Vergleich:
Delphi-Quellcode:
Nehmen wir an REMPILLAR ist 0. Dann würde bei die Schleife mit dem IF am Anfang gar nicht erst starten. Die andere aber schon.
if REMPILLAR > 0 then
for v := 0 to (REMPILLAR - 1) do Nehmen wir jetzt mal an REMPILLAR ist 5. Dann würde bei oberer Schleife (ohne IF) folgendes passieren:
Delphi-Quellcode:
Bei der anderen (die mit der Abfrage am Anfang) folgendes:
for v := 0 to 5 do
Delphi-Quellcode:
Man sieht, die Unterschiede sind schon vorhanden. ;)
for v := 0 to 4 do
|
Re: for to do: 0 to -1
Ja, du hast natürlich rechts, sorry.
Ist wohl doch schon zu spät. Stimmt, es müsste dann natürlich
Delphi-Quellcode:
sein.
for v:=1 to REMPILLAR do
Danke für den Hinweis. |
Re: for to do: 0 to -1
Moin, moin, himitsu,
Zitat:
Das ist mir schon früher aufgefallen, dass es bei Delphi 7 anscheinend keinen Einfluss auf die Programmgrösse hat, welche Prüfungen man aktiviert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 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