302 votes

Pourquoi avons-nous besoin de syndicats C ?

Quand faut-il recourir aux syndicats ? Pourquoi en avons-nous besoin ?

1voto

dicroce Points 11988

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\];
};

0voto

Zaibis Points 1616

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.

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