25.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 shows an example of a structure tag containing bit-fields that are unsigned integers and 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. 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;
};
