24.10 Structures, Unions, Enumerations, and Bit Fields

ISO Standard: “A member of a union object is accessed using a member of a different type (C90 6.3.2.3).”
Implementation: The corresponding bytes of the union object are interpreted as an object of the type of the member being accessed without regard for alignment or other possible invalid conditions.
ISO Standard: “Whether a “plain” int bit field is treated as a signed int bit field or as an unsigned int bit field (C90 6.5.2, C90 6.5.2.1, C99 6.7.2, C99 6.7.2.1).”
Implementation: By default on PIC32C, a plain int bit field is treated as an unsigned integer. Note that this is different from the PIC32M. The default behavior can be set explicitly by the compiler flags -funsigned-bitfields and -fsigned-bitfields.
ISO Standard: “Allowable bit field types other than _Bool, signed int, and unsigned int (C99 6.7.2.1).”
Implementation: No other types are supported.
ISO Standard: “Whether a bit field can straddle a storage unit boundary (C90 6.5.2.1, C99 6.7.2.1).”
Implementation: No.
ISO Standard: “The order of allocation of bit fields within a unit (C90 6.5.2.1, C99 6.7.2.1).”
Implementation: Bit fields are allocated left to right.
ISO Standard: “The alignment of non-bit field members of structures (C90 6.5.2.1, C99 6.7.2.1).”
Implementation: Each member is located to the lowest available offset allowable according to the alignment restrictions of the member type.
ISO Standard: “The integer type compatible with each enumerated type (C90 6.5.2.2, C99 6.7.2.2).”
Implementation: If the enumeration values are all non-negative, the type is unsigned int, else it is int. The -fshort-enums command line option can change this.