Microchip Technology XC8 Standard Compiler (Workstation) SW006021-1 SW006021-1 User Manual

Product codes
SW006021-1
Page of 518
Common C Interface
 2012 Microchip Technology Inc.
DS52053A-page 23
2.4.13.2
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.
2.4.13.3
MIGRATION TO THE CCI
Any code that defines a bit-field with the plain int type should be reviewed. If the inten-
tion was for these to be signed quantities, then the type of these should be changed to 
signed int
, for example, in:
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;
};
2.4.14
Bit-fields Straddling a Storage Unit Boundary
Whether a bit-field can straddle a storage unit boundary is implementation-defined 
behavior in the standard. In the CCI, bit-fields will not straddle a storage unit boundary; 
a new storage unit will be allocated to the structure, and padding bits will fill the gap.
Note that the size of a storage unit differs with each compiler as this is based on the 
size of the base data type (e.g., int) from which the bit-field type is derived. On 8-bit 
compilers this unit is 8-bits in size; for 16-bit compilers, it is 16 bits; and for 32-bit com-
pilers, it is 32 bits in size.
2.4.14.1
EXAMPLE
The following shows a structure containing bit-fields being defined.
struct {
        unsigned first  : 6;
        unsigned second :6;
} order;
Under the CCI and using XC8, the storage allocation unit is byte sized. The bit-field 
second
, will be allocated a new storage unit since there are only 2 bits remaining in 
the first storage unit in which first is allocated. The size of this structure, order, will 
be 2 bytes.
2.4.14.2
DIFFERENCES
This allocation is identical with that used by all previous compilers.
2.4.14.3
MIGRATION TO THE CCI
No action required.
2.4.15
The Allocation Order of Bits-field
The memory ordering of bit-fields into their storage unit is not specified by the ANSI C 
Standard. In the CCI, the first bit defined will be the least significant bit of the storage 
unit in which it will be allocated.