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 ?
Réponses
Trop de publicités?À 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.
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.