2010-11-18 18 views
0

J'ai un C++ déclaration:déclaration enum dans Windows à Linux

enum SETTINGS:UINT32 
{ 
    a=1, 
    b=2, 
}; 
  1. quel est le sens de: UINT32?
  2. Comment puis-je swich cette déclaration à Linux?
+0

Quelle version du compilateur gcc vous utilisez sur linux? –

Répondre

-1

u = non signé int = entier 32 = 32 bits

lire ceci: "Uint32", "int16" and the like; are they standard c++?

+0

comment est-ce lié? – sud03r

+0

Si vous avez seulement pris le temps de lire le post, votre tête comprendrait que c'est aussi lié à la poste que votre commentaire au propriétaire de la question. Bien sûr, c'est une macro. – Bourne

+0

Je suppose que la question était de savoir ce que 'enum_type [: optionnel-type]' veut dire, et pas à propos de uints et ints. – sud03r

1

Ici, la syntaxe :UINT32 spécifie le type ENUM sous-jacent. Cependant, ce n'est pas standard C++ (au moins, pas C++ 03 standard) mais une extension Visual Studio: g ++ le rejettera probablement, et vous devriez aussi.

EDIT Ainsi qu'il est souligné dans les commentaires de Martin York, g ++ supporte cette syntaxe depuis la version 4.4, donc je suppose que le seul problème pour un portage Linux serait UINT32 étant non standard.

+0

G ++ prend déjà en charge la syntaxe dans les versions 4.4 et ultérieures. Version actuelle 4.5.1 –

+0

@Martin York Merci, je suis en train d'éditer ma réponse pour ajouter cette précision – icecrime

4

Sa partie de la nouvelle C++ 0x mode de déclarant énumérations

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

Par défaut, un enum est représenté par un nombre entier.
La nouvelle syntaxe vous permet de définir éventuellement le type utilisé pour représenter l'énumération

Dans ce cas, il indique que la représentation sous-jacente doit être de type UINT32. Ce que cela signifie dépendra de ce que la macro UINT32 a été définie. Mais il s'agit probablement d'un nombre entier d'au moins 32 bits et n'est pas signé. :-)

Voir la description Björnes de la nouvelle substance enum:
http://www2.research.att.com/~bs/C++0xFAQ.html#enum

+0

Il n'y a pas de valeur par défaut pour l'énumération dans la norme, c'est précisément pourquoi ce nouveau format a été introduit. Il vous permet de transmettre des enums, ce qui n'était pas possible auparavant puisque toute l'énumération serait nécessaire pour en déterminer la taille. (Je ne doute pas cependant que int est presque toujours utilisé) –

+0

@ edA-qa mort-ora-y: En fait, la norme stipule explicitement que enum sera représenté par un type entier (et leurs sont des règles spéciales que personne, mais le l'auteur du compilateur se soucie de). Bien que l'implémentation par défaut soit définie quel type d'entier. Voir la section 7.2 (Je lisais le brouillon immédiatement après la norme C++ 03 mais je doute qu'il ait changé). –

+0

Je voulais dire qu'il n'utilisera pas nécessairement le type "int", il utilisera simplement l'un des types entiers. C'est-à-dire qu'il peut choisir quelle taille il veut pour l'énumération en fonction de ses valeurs: la raison pour laquelle il ne peut pas être déclaré en avant. –