I want to make a shared library that exposes structs and unions that aren't just opaque pointers. Is this portable at all between compilers on the same platform or should I change the design completely? A lot of libraries do this but I'm not sure how if it's a good idea since the padding in structs and unions may change depending on the compiler used.