Quand faut-il recourir aux syndicats ? Pourquoi en avons-nous besoin ?
Réponses
Trop de publicités?Les syndicats sont formidables. Une utilisation intelligente des unions que j'ai vue est de les utiliser lors de la définition d'un événement. Par exemple, vous pouvez décider qu'un événement est de 32 bits.
Maintenant, dans ces 32 bits, vous pourriez désigner les 8 premiers bits comme identifiant de l'expéditeur de l'événement... Parfois vous traitez l'événement dans son ensemble, parfois vous le disséquez et comparez ses composants. Les syndicats vous donnent la flexibilité de faire les deux.
union Event
{
unsigned long eventCode;
unsigned char eventParts\[4\];
};
Un exemple simple et très utile est .....
Imaginez :
vous avez un uint32_t array[2]
et que vous voulez accéder aux 3ème et 4ème octets de la chaîne d'octets. vous pouvez faire *((uint16_t*) &array[1])
. Mais cela enfreint malheureusement les règles strictes de l'aliasing !
Mais les compilateurs connus vous permettent de faire ce qui suit :
union un
{
uint16_t array16[4];
uint32_t array32[2];
}
techniquement, il s'agit toujours d'une violation des règles. mais toutes les normes connues supportent cet usage.
- Réponses précédentes
- Plus de réponses