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 decided to choose the following path.
.member
initialization.static const struct Foobar
initialization of membersInstead declare the global variable:
extern "C" {
extern const struct Foobar foobar;
}
and initialize it in a global section:
struct Foobar foobar = { 0, 0, 0, 0 };
and instead of bugging the C++ compiler with modern ANSI C99 syntax I let the linker do the work be demangling C symbols.