Structures, Unions, Enumerations, and Bit-Fields#
A member of a union object is accessed using a member of a different type (C90 6.3.2.3).
The relevant bytes of the representation of the object are treated as an object of the type used for the access. See type-punning. This may be a trap representation.
Whether a ‘plain’
int
bit-field is treated as asigned int
bit-field or as anunsigned int
bit-field (C90 6.5.2, C90 6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).By default it is treated as
signed int
but this may be changed by the-funsigned-bitfields
option.Allowable bit-field types other than
_Bool
,signed int
, andunsigned int
(C99 and C11 6.7.2.1).Other integer types, such as
long int
, and enumerated types are permitted even in strictly conforming mode.Whether atomic types are permitted for bit-fields (C11 6.7.2.1).
Atomic types are not permitted for bit-fields.
Whether a bit-field can straddle a storage-unit boundary (C90 6.5.2.1, C99 and C11 6.7.2.1).
Determined by ABI.
The order of allocation of bit-fields within a unit (C90 6.5.2.1, C99 and C11 6.7.2.1).
Determined by ABI.
The alignment of non-bit-field members of structures (C90 6.5.2.1, C99 and C11 6.7.2.1).
Determined by ABI.
The integer type compatible with each enumerated type (C90 6.5.2.2, C99 and C11 6.7.2.2).
Normally, the type is
unsigned int
if there are no negative values in the enumeration, otherwiseint
. If-fshort-enums
is specified, then if there are negative values it is the first ofsigned char
,short
andint
that can represent all the values, otherwise it is the first ofunsigned char
,unsigned short
andunsigned int
that can represent all the values.On some targets,
-fshort-enums
is the default; this is determined by the ABI.