The C programming language: myth vs reality [hidden strict fields] | Hugonweb Annotated Link Bibliography
https://www.lelanthran.com/chap9/content.html
Struct internals can be hidden from public consumers by hiding the struct definition in a source (not header) file like this:
Header File:
typedef struct MyType MyType;
MyType* init(int a, float b, ...);
Source File:
struct MyType { int a, float b, ... };
MyType* init(...) { ... };
The user of the header file doesn't even know how big a MyType is! They can't mess with it.