9.5.2.2 dsPIC33A Example

For example:

   struct foo {
     long long i:40;
     int j:16;
     char k:8;
   } x;

   struct bar {
     long long I:40;
     char J:8;
     int K:16;
   } y;

struct foo will have a size of 8 bytes using the compiler. i will be allocated at bit offset 0 (through 39). No padding is required before j, allocated at bit offset 40 since j can be fully allocated without crossing an integer boundary at bit offset 64. k will be allocated at bit offset 56 as it can fit without crossing a boundary. The structure does not require extra padding to maintain alignment in an array.

struct bar will have a size of 8 bytes using the compiler. I will be allocated at bit offset 0 (through 39). There is no need to pad before J because it will not cross a storage boundary for a char. J is allocated at bit offset 40. K can be allocated starting at bit offset 48, completing the structure.

For this architecture, struct foo and struct bar have the same size.

Unnamed bitfields may be declared to pad out unused space between active bits in control registers. For example:

   struct foo {
     unsigned int lo : 1;    
     unsigned int : 6;
     unsigned int hi : 1;
   } x;