2010-11-18 13 views
0

Ich habe eine C++ Deklaration:Enum-Deklaration in Windows auf Linux

enum SETTINGS:UINT32 
{ 
    a=1, 
    b=2, 
}; 
  1. was ist die Bedeutung von: UINT32?
  2. Wie kann ich diese Deklaration zu Linux wechseln?
+0

Welche Version des gcc-Compiler Sie unter Linux verwenden? –

Antwort

-1

u = unsigned integer int = 32 = 32 bit

dieses lesen: "Uint32", "int16" and the like; are they standard c++?

+0

wie ist das zusammen? – sud03r

+0

Wenn Sie nur ein wenig Zeit mit dem Lesen des Posts haben, würde Ihr Kopf verstehen, dass es mit dem Post verwandt ist, da Ihr Kommentar zum Eigentümer der Frage lautet. Natürlich ist es ein Makro. – Bourne

+0

Ich denke, die Frage hier war, was 'enum_type [: optional-type] bedeutet, und nicht über uints und ints. – sud03r

1

Hier wird die Syntax :UINT32 gibt die zugrunde liegenden enum-Typ. Jedoch das ist nicht Standard C++ (zumindest nicht Standard C++ 03), sondern eine Visual Studio-Erweiterung: g ++ wird es wahrscheinlich ablehnen, und Sie sollten auch.

EDIT Wie in den Kommentaren von Martin Yorker zeigte, g ++ unterstützt diese Syntax seit Version 4.4, so dass ich denke, das einzige Problem für eine Linux-Portage wäre UINT32 nicht Standard.

+0

G ++ unterstützt bereits die Syntax in Version 4.4 und höher. Aktuelle Version 4.5.1 –

+0

@Martin York Danke, ich bearbeite meine Antwort, um diese Genauigkeit hinzuzufügen – icecrime

4

seinen Teil des neuen C++ 0x Weise erklärt enums

enum <EnumTypeName> [: <Optinal-Type>] { <ValueList> }; 

standardmäßig eine ENUM durch eine ganze Zahl dargestellt wird.
Mit der neuen Syntax können Sie optional den Typ definieren, der zur Darstellung der Enumeration verwendet wird

In diesem Fall gibt es an, dass die dem Enum zugrunde liegende Repräsentation vom Typ UINT32 sein sollte. Was das bedeutet, hängt davon ab, wie das Makro UINT32 definiert wurde. Aber es ist wahrscheinlich eine ganze Zahl von mindestens 32 Bits und ist unsigniert. :-)

Siehe Björnes Beschreibung der neuen Enum Sachen:
http://www2.research.att.com/~bs/C++0xFAQ.html#enum

+0

Es gibt keinen Standard für die enum im Standard, dies ist speziell warum dieses neue Format eingeführt wurde. Sie können Deklarations-Enums weiterleiten, was zuvor nicht möglich war, da die gesamte Enumeration benötigt würde, um die Größe zu bestimmen. (Ich bezweifle jedoch nicht, dass int fast immer verwendet wird) –

+0

@ edA-qa mort-ora-y: Tatsächlich gibt der Standard explizit an, dass enum durch einen Integer-Typ repräsentiert wird (und es gibt einige spezielle Regeln, die niemand außer dem Compilerschreiber interessiert sich). Der Standardwert ist die Implementierung, die den Integer-Typ definiert. Siehe Abschnitt 7.2 (Ich habe den Entwurf gelesen, der sofort dem C++ 03 Standard folgt, aber ich bezweifle, dass sich das geändert hat). –

+0

Ich meinte, dass es nicht unbedingt den Typ "int" verwenden wird, es wird einfach einen der Integer-Typen verwenden. Das heißt, es kann basierend auf seinen Werten die gewünschte Größe für die Enumeration wählen: der Grund, warum es nicht vorwärts deklariert werden kann. –