Hello! I have a typedef union and variable:
typedef union int2char{unsigned char high_byte; unsigned char low_byte; unsigned int int_byte; } int2char; int2char dac_value;
When i assign
dac_value.int_byte = 0xAAAA;
i have
dac_value.int_byte = 0xAAAA; dac_value.low_byte = 0xAA; dac_value.high_byte = 0xAA;
but when i assign,example,0xFF05
dac_value .int_byte = 0xFF05; dac_value.low_byte =0xFF; dac_value.high_byte = 0xFF;
same results are obtained when i assign,example,0x1005
dac_value .int_byte = 0x1005; dac_value.low_byte =0x10; dac_value.high_byte = 0x10;
I can not understand where the error and why?? thanks for the help!.
Note that the above point should not be pushed too far.
There are a specific situation where assigns to union member a explicitly allows reads from other union members.
§6.5.2.3 bullet 5 claims: "One special guarantee is made in order to simplify the use of unions: if a union contains several structures that share a common initial sequence (see below), and if the union object currently contains one of these structures, it is permitted to inspect the common initial part of any of them anywhere that a declaration of the complete type of the union is visible. Two structures share a common initial sequence if corresponding members have compatible types (and, for bit-fields, the same widths) for a sequence of one or more initial members."
Yes indeed the problem I have decided in two ways, should announce:
typedef union int2char{ unsigned int int_byte; unsigned char char_byte[2];}int2char;
} or
typedef union int2char{ unsigned int int_byte; struct char_byte{ unsigned char high_byte; unsigned char low_byte;}char_byte; }int2char; }
Thanks a lot for such an active assistance also sorry for the low level of English, I use a translator. :)