6
votes

Quel est le type de données de C ENUM de CLANG COMPILER?

J'ai posté autre question: quel type Devrais-je utiliser une représentation binaire de C Enum? , et par la réponse, je dois connaître le type de données Enum de mon compilateur.

Quel est le type de données de C ENUM sur CLANG COMPILER?


0 commentaires

3 Réponses :


1
votes

Eh bien, un compilateur peut choisir une taille entière assez gros mais je suppose que cela choisira une taille "natif" (un "mot" = la taille du registre, doit être long pour le mode X86 32 bits ou longtemps pendant x64). Pour votre structure privée, vous ne devriez pas m'en soucier, mais si vous souhaitez le sérialiser à un fichier ou sur le réseau, vous devez utiliser explicitement un type d'entier suffisamment grand (par exemple long) afin que vous puissiez le ramasser avec un autre compilateur / langue. Sans maux de tête.

Si vous voulez vraiment savoir, demandez simplement au compilateur: xxx


0 commentaires

9
votes

Comme la plupart des compilateurs C (tous, peut-être) C, la taille d'un type énuméré peut varier. Voici un exemple de programme et sa sortie: xxx

sortie: xxx

tout ce que la norme nécessite:

Le choix du type est défini par la mise en œuvre, mais doit être capable de représenter les valeurs de tous les membres de l'énumération.

Une recherche sur le Web rapide n'a pas abouti à un manuel de Clang spécifié son comportement, mais l'un est presque certainement là quelque part.


1 commentaires

Clang-11 met correctement mes valeurs de 64 bits dans un type 32 bits. Ils sont tronqués. Donc, apparemment, tous les compilateurs traditionnels suivent la spécification. : - /



2
votes

En plus de la réponse de Carl, il peut même être compatible avec un type signé ou non signé si quelque chose de ce qui convient mieux. Par exemple, il pourrait mais ne doit pas dans xxx

avoir petit dans un signé Char et gros dans un non signé char .

btw the constantes m , a et b < / code> ne sont pas de type d'énumération mais toujours de type int .

edit: je viens de tester avec des valeurs plus grandes que int . En mode C99 gcc émet une erreur (qui est correct) mais clang uniquement un avertissement et qu'un type plus large pour représenter le Enum .


0 commentaires