sizeof enum in C Sprache

8

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?

%Vor%

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?

    
abhi 02.04.2012, 07:24
quelle

5 Antworten

17

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:

%Vor%

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 .

    
Some programmer dude 02.04.2012, 07:30
quelle
5

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.

    
Alok Save 02.04.2012 07:26
quelle
3

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 .

    
ouah 02.04.2012 07:42
quelle
2

enum ist normalerweise wie int . Es ist ein Typ, kein Array oder eine Struktur, also verstehe ich nicht, warum Sie erwarten, dass es 28 ist.

    
littleadv 02.04.2012 07:26
quelle
0

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%

    
Jonathan 19.10.2014 19:27
quelle

Tags und Links