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!.
low_byte and high_byte have the same address and therefore the same value
No, they don't. They do have the same address, but strictly spoken, and in the use case at hand, both of them have no value at all. Their values don't exist because they're not the union variant last written to. Non-existent things have no properties --- not even equality.
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. :)