Tapez punning Vs access membre de l’Union

Selon cette https://stackoverflow.com/a/1812932/1814023 writing one member of union and reading another member is undefined behavior.

Et selon ce https://stackoverflow.com/a/11640603/1814023, le type punning is allowed in C99 / C11

Je suis un peu confus sur ces deux posts, lequel est correct? Besoin d’aide pour comprendre le type punning Vs accédant au membre du syndicat.

Merci.

    Son implémentation est définie dans C89:

    C89 3.3.2.3 Structure et membres du syndicat

    À une exception près, si un membre d’un object d’ union est accédé après le stockage d’une valeur dans un autre membre de l’object, le comportement est défini par l’implémentation. Une garantie spéciale est fournie afin de simplifier l’utilisation des unions: Si une union contient plusieurs structures partageant une séquence initiale commune, et si l’object union contient actuellement l’une de ces structures, il est permis d’inspecter la partie initiale commune de toute unité. d’eux. Deux structures partagent une séquence initiale commune si les membres correspondants ont des types compatibles pour une séquence d’un ou plusieurs membres initiaux.

    Dans C99 / C11, c’est autorisé, bien que lorsqu’il s’agit d’une représentation de piège , la valeur soit indéterminée.

    C11 6.5.2.3 Note sur la structure et les membres du syndicat

    Si le membre utilisé pour lire le contenu d’un object d’ union n’est pas identique au dernier membre utilisé pour stocker une valeur dans l’object, la partie appropriée de la représentation de l’object de la valeur est réinterprétée en tant que représentation d’object dans le nouveau type décrit au 6.2.6 (processus parfois appelé ” type punning ”). Cela pourrait être une représentation de piège.