24.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;
};
