Even if the PIMPL idiom is C++ thing, it has actually be used for longer in plain C as anonymous void
pointers.
If you want the structure to have private implementation-specific fields, then create a structure for those private fields, and add a void
pointer field to the public structure. Then have an init
or create
function which allocates this private structure, and makes the void
pointer field in the public structure point to that private structure.