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.