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++
Répondre
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
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
peut-être que MSVC implémente déjà C++ 0x, mais il devrait être "enum de classe" si je ne me trompe pas – lothar
C'est une extension C++/CLI: http://msdn.microsoft.com/ En-us/library/ms173702.aspx – Eclipse
- 1. Comment publier au serveur en utilisant le compilateur aspnet
- 2. nullables énumérations (??) et LinqToSQL
- 3. Comment examiner le contenu d'un vecteur std :: dans gdb, en utilisant le compilateur icc?
- 4. Exporter le code du modèle = dangereux? (MSVC)
- 5. Résolution de surcharge avec deux énumérations
- 6. Détecter le compilateur aveC#ifdef
- 7. erreur constante dans le compilateur en utilisant C# 's fourni des objets
- 8. MSVC équivalent à '__builtin_return_address'
- 9. py2exe incluant les DLLs MSVC dans le fichier .exe
- 10. encapsuler des énumérations ou non?
- 11. Compilateur LCM/GCD en C
- 12. Extension énumérations via l'entrée utilisateur
- 13. Comment implémenter des énumérations COM sécurisées?
- 14. différences DirectCast & Ctype avec énumérations
- 15. Utilisation d'alias de type Java énumérations
- 16. Math avec énumérations (par exemple DayOfWeek) en C#
- 17. Directives du préprocesseur prises en charge par le compilateur RIM
- 18. Le compilateur d'exécution .Net prend-il en charge C# 3.0?
- 19. Est-il possible de compiler le code d'assemblage dans MSVC++?
- 20. une collection de énumérations avec NHibernate
- 21. Comment compiler le programme de base de Windows avec eclipse cdt (en utilisant le compilateur VIsual Studio)
- 22. Comment puis-je dormir dans mon application console MSVC++?
- 23. En-têtes précompilés MSVC: Quels fichiers doivent # inclure "stdafx.h"?
- 24. Problème lors de l'examen du code d'octet dans MSVC++
- 25. Comment invoquer le compilateur C++ par programme?
- 26. avancée énumérations Java comme dans Ruby
- 27. conception compilateur
- 28. Opérateur de résolution d'étendue sur enums une extension spécifique au compilateur?
- 29. Révéler la DescriptionAttribute de énumérations d'un service WCF
- 30. vb.net, l'option stricte, énumérations et ToString primordial
é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
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). –
@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