J'ai vu quelques questions ici sur la façon de forcer une énumération à 8 ou 16 bits. La réponse commune était que cela peut être fait en C++ 11 ou supérieur. Malheureusement, je n'ai pas ce luxe.Forçage champ enum à 8 bits en C standard avec champs de bits
Alors, voici ce que je pense. J'ai seulement besoin que l'enum soit de 8 bits quand c'est dans une structure dont je veux minimiser la taille. Alors:
Option A:
typedef enum { A, B, C, MAX = 0xFF } my_enum;
struct my_compact_struct
{
my_enum field1 : 8; // Forcing field to be 8 bits
uint8_t something;
uint16_t something_else;
};
Je pense que la plupart ou tous les optimiseurs devrait être assez intelligent pour gérer le 8 BitField efficacement.
Option B:
Ne pas utiliser un ENUM. Utilisez plutôt typedef et les constantes.
typedef uint8_t my_type;
static const my_type A = 0;
static const my_type B = 1;
static const my_type C = 2;
struct my_compact_struct
{
my_type field1;
uint8_t something;
uint16_t something_else;
};
Option A est actuellement mis en œuvre et semble fonctionner, mais comme je veux faire (maintenant et dans l'avenir) ce qui est correct maintenant et pas seulement ce qui fonctionne, je me demandais si l'option B est nettement meilleure.
Merci,
(A) ne minimisera pas le champ. Il ne fera que 8 bits de tout le champ utilisable. – StoryTeller
C et C++ sont des langages différents. Lequel utilisez-vous? – Olaf
Votre question indique "Standard C" mais vos tags incluent "C++". Lequel utilisez-vous? –