Est-il valable d'utiliser des champs de bits avec union?
J'ai utilisé peu de champ avec une structure comme ceci,
struct
{
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
} flags;
Maintenant, je demandais à voir si cela peut être fait avec une union si j'ai modifié le code comme,
union
{
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
} flags;
J'ai trouvé le champ de bits de l'union des œuvres, mais tous ces champs dans l'union sont donnés à un seul bit que j'ai compris de sortie. Je vois maintenant qu'il n'est pas erroné d'utiliser des champs de bits de l'union, mais il me semble que, comme ce n'est pas correcte du point de vue opérationnel. Quelle est donc la réponse - est-il valable à l'utilisation de champ de bits de l'union?
source d'informationauteur amin__
Vous devez vous connecter pour publier un commentaire.
Vous êtes donné un fusil et des balles. Est-il correct de tirer votre auto dans le pied avec? Bien sûr que non, mais personne ne peut vous empêcher de faire cela si vous voulez.
Mon point est, tout comme le pistolet et des balles, des syndicats et des champs de bits sont des outils et ils ont leur but, les utilisations et les "abus". Donc, en utilisant bitfields dans l'union, comme vous l'avez écrit ci-dessus, est parfaitement valide en C, mais un morceau inutile de code. Tous les champs à l'intérieur de l'union partagent la même mémoire de sorte que tous les bitfields que vous mentionnez sont essentiellement de même drapeau qu'ils partagent la même mémoire.
Il est valide mais que vous l'avez trouvé, pas utile de la façon dont vous l'avez fait là.
Vous pourriez faire quelque chose comme cela, donc vous pouvez réinitialiser tous les bits dans le même temps à l'aide de drapeaux.
Ou vous pourriez faire quelque chose comme ceci: