Frage

Ist enum Typ signiert oder nicht signiert? Unterscheidet sich die Unterzeichnung von Enums in C/C99/ANSI C/C ++/C ++ x/gnu c/gnu c99?

Vielen Dank

War es hilfreich?

Lösung

Es wird garantiert, dass eine Aufzündung durch eine Ganzzahl dargestellt wird, aber der tatsächliche Typ (und seine Unterzeichnung) ist implementierungsabhängig.

Sie können zwingen, dass eine Aufzählung durch einen signierten Typ dargestellt wird, indem Sie einem der Aufzähler einen negativen Wert geben:

enum SignedEnum { a = -1 };

In C ++ 0x kann der zugrunde liegende Typ einer Aufzählung explizit angegeben werden:

enum ShortEnum : short { a };

(C ++ 0x fügt auch Unterstützung für Scoped -Aufzählungen hinzu)

Zur Vollständigkeit werde ich das hinzufügen Die C -Programmiersprache, 2. Aufl., Aufzähler sind als Typ angegeben int (S. 215). K & R ist nicht der C -Standard, also ist das für ISO -C -Compiler nicht normativ, aber es geht vor dem ISO -C -Standard aus, sodass es aus historischer Sicht zumindest interessant ist.

Andere Tipps

Dies ist eine alte Frage ... aber ich habe gerade das herausgefunden:

typedef unsigned ENUMNAME;  // this makes it unsigned in MSVC C 2015
typedef enum {v0, v1, v2, v3} ENUMNAME;

Sie können es als 2-Bit-Unsigned-Index verwenden, zum Beispiel:

typedef struct {
  ENUMNAME i:2;
} STRUCTNAME;

Versuchte es in GCC -Arm - funktioniert nicht.
Auch Windbg zeigt StructName.i als Nummer, nicht als V0-V3.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top