4.3.13 Default Bit-field int
Type
The type of a bit-field specified as a plain int
is
identical to that of one defined using unsigned int
. This is quite
different from other objects where the types int
, signed
and signed int
are synonymous. It is recommended that the signedness of
the bit-field be explicitly stated in all bit-field definitions.
Example
The following example shows a structure tag containing bit-fields that are unsigned integers with the size specified.
struct OUTPUTS {
int direction :1;
int parity :3;
int value :4;
};
Differences
The 8-bit compilers have previously issued a warning if type
int
was used for bit-fields, but would implement the bit-field with an
unsigned int
type.
The 16- and 32-bit compilers have implemented bit-fields defined using
int
as having a signed int
type, unless the option
-funsigned-bitfields
was specified.
Migration to the CCI
Any code that defines a bit-field with the plain int
type
should be reviewed. If the intention was for these to be signed quantities, then the type
of these should be changed to signed int
. For example, in the following
example:
struct WAYPT {
int log :3;
int direction :4;
};
the bit-field type should be changed to signed int, as in:
struct WAYPT {
signed int log :3;
signed int direction :4;
};