This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Typedef union problem

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!.

Parents
  • nope, not in C

    Have a look at 6.7.2.1 in ISO/IEC 9899:1999.

    Bullet 14 says:
    "The size of a union is sufficient to contain the largest of its members. The value of at most one of the members can be stored in a union object at anytime. A pointer to a union object, suitably converted, points to each of its members (or if a member is a bit-field, then to the unit in which it resides), and vice versa."

    Note that a pointer to a union object points to each of its members - that is because all members of a union starts at the start of the union. That also means that the union must match the alignment of the member that has highest alignment requirements.

Reply
  • nope, not in C

    Have a look at 6.7.2.1 in ISO/IEC 9899:1999.

    Bullet 14 says:
    "The size of a union is sufficient to contain the largest of its members. The value of at most one of the members can be stored in a union object at anytime. A pointer to a union object, suitably converted, points to each of its members (or if a member is a bit-field, then to the unit in which it resides), and vice versa."

    Note that a pointer to a union object points to each of its members - that is because all members of a union starts at the start of the union. That also means that the union must match the alignment of the member that has highest alignment requirements.

Children