I have built a working C library, that uses constants, in header files defined as
typedef struct Y { union { struct bit_field bits; uint8_t raw[4]; }
I had the same problem. For C89 the following is true:
With C89-style initializers, structure members must be initialized in the order declared, and only the first member of a union can be initialized
I found this explanation at: Initialization of structures and unions