166 votes

Quelle est la taille d’un enum en C ?

Je suis la création d’un ensemble de valeurs enum, mais j’ai besoin chaque valeur enum à 64 bits de large. Si je me souviens bien, un enum est généralement la même taille qu’int ; mais j’ai pensé que j’ai lu quelque part que (au moins dans GCC) le compilateur peut rendre l’enum n’importe quelle largeur ils doivent faire pour contenir leurs valeurs. Alors, est-il possible d’avoir une énumération, qui est la largeur de 64 bits ?

118voto

Michael Stum Points 72046

À partir de la Norme C (C99): http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

6.7.2.2 Énumération des prescripteurs
[...]
Les contraintes
L'expression qui définit la valeur d'une constante d'énumération doit être un nombre entier expression constante qui a une valeur représentable comme un int.
[...]
Chaque type énuméré doit être compatible avec le char, un entier signé de type, ou d'un type entier non signé. Le choix du type de mise en œuvre est définie, mais doit être capable de représenter les valeurs de tous les membres de l'énumération.

Pas que les compilateurs sont toutes bonnes, à la suite de la série, mais pour l'essentiel: Si votre enum tient à autre chose qu'un int, vous êtes dans la "non prise en charge du problème qui peut revenir à vous mordre dans un an ou deux" territoire.

109voto

Robert Gamble Points 41984

Un n’est assurée d’être assez grand pour contenir valeurs. Le compilateur est libre de choisir le type réel utilisé basé sur les constantes de l’énumération définies donc il peut choisir un type plus petit si il peut représenter les valeurs que vous définissez. Si vous avez besoin des constantes d’énumération qui ne rentre pas dans un `` vous aurez besoin d’utiliser les extensions spécifiques au compilateur au pour faire.

24voto

Kevin Cox Points 725

Alors que les réponses ci-dessus sont corrects, que certains compilateurs ont des options de casser la norme et d’utiliser le plus petit type qui contiendra toutes les valeurs.

Exemple avec gcc :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X