Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   inc bei ordinären Typen(kein Ende in sicht) (https://www.delphipraxis.net/105949-inc-bei-ordinaeren-typen-kein-ende-sicht.html)

snow 2. Jan 2008 23:02


inc bei ordinären Typen(kein Ende in sicht)
 
Hallo

ich hab gerade etwas merkwürdiges bemerkt. Wenn ich einen Ordinären typ habe (z.B mit 4 Einträgen) Dann sollte doch nach dem 4 mal inc wieder der erste Eintrag an der reihe sein oder? Der erste ist ja schließlich der letzte Plus Eins. dem ist aber nicht so.
inc zählt einfach gnadenlos weiter und verursacht natürlich Fehler. ist dass normal?

Gruß snow

PS:// Wiso gibts kein Gegenteil von inc?

Die Muhkuh 2. Jan 2008 23:03

Re: inc bei ordinären Typen(kein Ende in sicht)
 
Das Gegenteil von inc ist dec...

snow 2. Jan 2008 23:15

Re: inc bei ordinären Typen(kein Ende in sicht)
 
Danke ich hatte mich schon gewundert....

Aber wiso ist

Delphi-Quellcode:

type Tmy123 = (eins,zwei,drei,vier);

var test : Tmy123;

begin

inc(test);
inc(test);
inc(test);
inc(test);

showmessage(inttostr(ord(test)));
end;
Nicht 0(eins)?

Gruß snow

Namenloser 2. Jan 2008 23:18

Re: inc bei ordinären Typen(kein Ende in sicht)
 
Andersherum gefragt: Wieso sollte es 0 sein?
Btw: Du inkrementierst eine uninitialisierte Variable

snow 2. Jan 2008 23:20

Re: inc bei ordinären Typen(kein Ende in sicht)
 
naja weil ich dachte, dass es niemals 4 sein kann... Bei mir is es aber 4.

nach Index = 3 sollte ja index = 0 folgen.

Gruß snow

Namenloser 2. Jan 2008 23:23

Re: inc bei ordinären Typen(kein Ende in sicht)
 
Intern sind Enums Integer (vllt. auch Bytes, bin mir da jetzt nicht sicher, ist aber auch egal).
Also kann jedes Enum auch jeden Wert einer Integer-Variable annehmen. Die "Werte" sind eigentlich nix anderes als Konstanten.

snow 2. Jan 2008 23:29

Re: inc bei ordinären Typen(kein Ende in sicht)
 
dass bedeutet, dass ein Enum also den wert 4 haben kann obwol es nur bezeichner von 0-3 hat.

naja ich habs jetz mit ner If ..else abfrage gelöst.

Gruß snow

3_of_8 3. Jan 2008 00:11

Re: inc bei ordinären Typen(kein Ende in sicht)
 
Es sind übrigens ordinale Typen, nicht ordinär. ;)

Ein enum kann auch Werte außerhalb des Wertebereichs haben. Es ist deine Aufgabe, das zu verhindertn. ;)

IIRC sind enums übrigens normalerweise keine Integers, sondern Cardinals. Welcher Cardinal hängt von der Anzahl der Elemente ab. Bis 256 Elemente ist es ein Byte, bis 65536 Elemente ein Word usw. Wobei es vermutlich selten Fälle gibt, in denen 65536 Elemente überschritten werden.

Das gilt natürlich nur für enums, denen nicht spezielle Werte zugewiesen wurden. (Also z.B. (bla=42, wuppdi=123456)). Außerdem kann es sein, dass der Compiler in records oder Klassen je nach Ausrichtungsoptionen immer ein LongWord (d.h. 32 Bit Cardinal) draus macht.

Chewie 3. Jan 2008 00:19

Re: inc bei ordinären Typen(kein Ende in sicht)
 
Meiner Meinung nach ist das durchaus ein Fehler. Klar sind Aufzählungsvariablen intern nur Zahlen - alles sind intern ja irgendwie Zahlen!

Aber auf einer höheren Abstraktionsebene definiert der Typ Tmy123 eine geordnete Menge von 4 Elementen, jede Variable dieses Typs kann genau ein Element dieser Menge als Wert haben. Inkrementiere ich das höchste Element der Menge, so soll entweder eine explizite Fehlersituation entstehen (eine Exception) oder die Menge ist zyklisch und es geht wieder vorne los.

Das wäre das, was ich semantisch erwarte.

Wenn ich das beschriebene Verhalten wollte, dann würde ich durch einen expliziten Cast auf Integer dem Compiler signalisieren, dass ich nicht an der semantischen Bedeutung des Wertes interessiert bin, sondern an dem numerischen Wert.

Aber offensichtlich dachten da die Designer der Sprache anders.

inherited 3. Jan 2008 01:39

Re: inc bei ordinären Typen(kein Ende in sicht)
 
was passiert wenn du am ende dein test wieder mit eins vergleichst, also auf test=eins testest? Liefert das true?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.
Seite 1 von 2  1 2      

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