Wie kann ich die Größe der enum Days
wissen? Wird es gleich 7*4(sizeof(int)) = 28
sein?
Die printf()
hier gibt mir den Wert 4
, Wie kann es erklärt werden?
Auch können wir das als (enum Days) (0) verwenden, was dem Ganzzahl-Array ähnlich ist. Wenn Größe gleich 4 ist, wie kann dann dieses Array-Verhalten erklärt werden?
In C sind alle Enums meistens ganze Zahlen vom Typ int
, was erklärt, warum sizeof(Days) == 4
für dich ist.
Um zu wissen, wie viele Werte in enum
enthalten sind, können Sie Folgendes tun:
Dann ist NUM_DAYS
die Anzahl der Aufzählungen in Days
.
Beachten Sie, dass dies nicht funktioniert, wenn Sie die Werte einer Aufzählung ändern, zum Beispiel:
%Vor% In der obigen Enumeration ist NUM_FOO
6
.
Es ist implementierungsabhängig. Eine Enum ist nur garantiert groß genug, um ganzzahlige Werte zu halten.
Referenz:
C99-Standard 6.7.2.2 Aufzählungsspezifikatoren
Einschränkungen
2 Der Ausdruck, der den Wert einer Enumerationskonstante definiert, muss eine ganze Zahl sein konstanter Ausdruck, der einen Wert hat, der als int darstellbar ist.
...
4 Jeder aufgezählte Typ muss mit char, einem vorzeichenbehafteten Integer-Typ oder einem vorzeichenlosen Integer-Typ kompatibel sein. Die Wahl des Typs ist durch die Implementierung definiert, 128 , soll aber in der Lage sein, die Werte aller Mitglieder der Aufzählung darzustellen . Der Aufzählungstyp ist unvollständig bis unmittelbar nach dem}, der die Liste der Aufzählungsdeklarationen beendet und danach vervollständigt.
In C ist ein Aufzählungstyp ein implementierungsdefinierter Integertyp, der alle Aufzählungskonstanten in der Aufzählung darstellen kann.
Mit gcc
, wenn in den enum-Konstanten kein negativer Wert angegeben wird, ist der Typ der implementierten Implementierung unsigned int
andernfalls ist int
.
Ein Enum-Typ sollte nicht mit den Enum-Konstanten verwechselt werden. Enum-Konstanten sind vom Typ int
.
Mit dem Compiler, den ich gerade benutze, hängt die sizeof(enum)
vom größten gespeicherten Wert ab. Wenn alle enum
-Werte <= 0xFF
sind, dann ist die Größe 1 Byte, aber wenn es einen Wert 0x100
gibt, dann wird die Größe um 2 Bytes ... Nur das Hinzufügen von Werten in enum
kann das Ergebnis von% ändern co_de%
Tags und Links c