AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi inc bei ordinären Typen(kein Ende in sicht)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von snow · begonnen am 3. Jan 2008 · letzter Beitrag vom 4. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#1

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

  Alt 3. Jan 2008, 00:02
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?
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

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

  Alt 3. Jan 2008, 00:03
Das Gegenteil von inc ist dec...
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#3

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

  Alt 3. Jan 2008, 00:15
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

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

  Alt 3. Jan 2008, 00:18
Andersherum gefragt: Wieso sollte es 0 sein?
Btw: Du inkrementierst eine uninitialisierte Variable
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#5

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

  Alt 3. Jan 2008, 00:20
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

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

  Alt 3. Jan 2008, 00:23
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.
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#7

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

  Alt 3. Jan 2008, 00:29
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
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 3. Jan 2008, 01:11
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

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

  Alt 3. Jan 2008, 01:19
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#10

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

  Alt 3. Jan 2008, 02:39
was passiert wenn du am ende dein test wieder mit eins vergleichst, also auf test=eins testest? Liefert das true?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 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