2009-05-07 9 views
1

Avec GCC, je pouvais faire de l'emballage énumérations en utilisant attribut ((emballés)), mais il semble que la chose la plus proche dans MSVC, #pragma paquet, ne fonctionne pas sur les énumérations. Est-ce que quelqu'un sait d'une manière de emballer des énumérations dans 1 byte au lieu de la taille entière habituelle?énumérations d'emballage en utilisant le compilateur MSVC++

+0

étant donné que l'aide (si elle existait) conduira à un code non portable, pourquoi auriez-vous besoin d'utiliser que de toute façon ? – lothar

+1

Parce que parfois la portabilité n'est pas pertinente et la compatibilité avec un autre système est nécessaire. Il y a des années, je voulais cela lors de la communication via la mémoire RAM partagée à une carte 68K (dont le compilateur pris en charge spécifiant la taille d'une énumération). –

+0

@Steve Fallows Dans ce cas je préférerais un (ensemble de) fonctions à convertir du C enum vers et depuis le format externe. cela est plus sûr (car il peut y avoir des conversions d'endian nécessaires (pas dans ce cas, mais en général) et portables – lothar

Répondre

2

Ceci est spécifique MSVC:

// instances of this enum are packed into 1 unsigned char 
// warning C4480: nonstandard extension used 
enum foo : unsigned char { first, second, last }; 
assert(sizeof(foo) == sizeof(unsigned char)); 

// instances of this enum have the common size of 1 int 
enum bar { alpha, beta, gamma }; 
assert(sizeof(bar) == sizeof(int)); 

Pour référence, voir ici: MSDN -> enum

+0

Je pense que c'est C# Je n'ai jamais vu une telle syntaxe en C++ Si cela fonctionne, c'est vraiment cool. Je m'abstiendrai de descendre parce que je ne suis pas sûr: – rmeador

+0

peut-être que MSVC implémente déjà C++ 0x, mais il devrait être "enum de classe" si je ne me trompe pas – lothar

+0

C'est une extension C++/CLI: http://msdn.microsoft.com/ En-us/library/ms173702.aspx – Eclipse

Questions connexes