Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.06.2004, 15:55

Größe einer enum-Aufzählung

Ich proggwe gerade mein eigene 3DFormat und will auch Chunks benutzen. Nun meine Frage: Änfdert sich die Größe einer enum Aufzählung, je nachdem, wie viele Aufzählungen sie beinhaltet? Den ich hab jetzt erstmal nur ein paar, die mir so einvielen, und ermittel die Größe der Chunk Struktur mit sizeof(). Wenn ich jetzt die enum-A. erweitere und die Größe sich ändern würde, könnte ich ja alle vorher gespeicherten Dateien vergessen.

2

22.06.2004, 16:08

Aehm ja, muss sich ändern, ist ja bloss eine art Array. Entweder machts du dir mehrere Lade Routinen (für ältere versionen die nur die Teile laden die sie kennen und den Rest Nullen) oder du hast ein Problem :(

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

3

22.06.2004, 16:23

du kannst die größe auch festlegen. Wird im DX SDK zB so gemacht:
(ungefähr)

Quellcode

1
2
3
4
enum
{
FORCEDWORD = 0xffffff;
}


Der enum muss nun groß genug sein um den wert für FORCEDWORD zu speichern.

4

22.06.2004, 17:27

Also heißt das der enum ist immer so groß, das er genau die letzte Zahl noch speichern kann? DAnn schrib ich also einfach als letzte Zahl, z.B. das FORCEWORD=32000 und hab dann Platzt für 32000 Aufzählungen auch wenn ich im Moment nur 5 hab?

5

22.06.2004, 17:36

also ich hab gerade mal sizeof benutzt und da war die Größe immer 4 egal ob nun ^oder 5 Aufzählungen waren. 4 entspricht doch dann einer int Zahl, also könnte man 2147483647*2 Aufzählungen verwenden, was eigentlich reichen sollte. Danach gibts wohl entweder eine Error, oder die Größe ändert sich.

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

6

22.06.2004, 17:38

Jo, soweit ich weiß ist das so.
Je nach dem wie groß der Maximalwert des enums ist wird die größe angepasst (auf ein vielfaches eines bytes schätze ich).

EDIT: Ja, anscheinend ist der enum gleich 4 byte groß. Kann sein, dass das ändern der größe auch compilerabhängig ist. Dann haben die dx-leute das mit FORCEDWORD zur sicherheit eingebaut damit der enum auch ganz sicher eine bestimmte größe hat. Ob der enum nun auch größer als 4 bytes werden kann musst du dann ausprobieren.

7

22.06.2004, 17:49

Livber nicht. Ich hab keine Lust 2 Millionen Aufzählungen ienzutippen...

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

8

22.06.2004, 17:54

Wie meinst du das?

Du kannst einfach "FORCEX = riesenzahl" schreiben. Es kommt nur auf den Maximalwert des enums an (in diesem Fall also FORCEX mit dem Wert "riesenzahl"), nicht auf die anzahl der definierten "enum-konstanten" (ka wie man die nennt).

9

22.06.2004, 18:01

Ach sind wir nicht alle Blöd ? Enum ist natürlich 4 Byte, Enum speichert ja nich die einzelne Enums in Strings etc. Von daher kannst genauso gut ein int nehmen, extern sieht ein enum für C++ / PC wie ein int aus, nur intern kannst du deine Enum Dinger nutzten für bessere Übersicht, daher sollte es immer 4 Byte sein :)

10

22.06.2004, 19:05

Gut das du noch deine erste Aussage revidiert hast furbolg ;) Denn ein Enum ist kein Array. Jeder Enum-Wert ist das gleiche wie eine Konstante.

Die größe richtet sich nach zwei Kriterien.
1) Ausrichtung des Codes. Da alles auf 4Byte ausgerichtet ist und darauf Optimiert wird, macht es keinen Sinn ein Enum-Wert als z.B. 1Byte Variable abzuspeichern.

2) Größe des max. Eintrags. Natürlich muss sich die Größe auch nach dem max. Wert richten. Sprich wenn ich einen Wert größer (2^32) eintrage muss der enum-Wert 64Bit breit werden.


Wenn dir das ganze nicht so recht klar ist, solltest du dir am besten Konstanten machen und keine Enums oder #define-Dinger verwenden.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige