cpplib has two interfaces—one is exposed internally only, and the other is for both internal and external use.
The convention is that functions and types that are exposed to multiple files internally are prefixed with ‘_cpp_’, and are to be found in the file internal.h. Functions and types exposed to external clients are in cpplib.h, and prefixed with ‘cpp_’. For historical reasons this is no longer quite true, but we should strive to stick to it.
We are striving to reduce the information exposed in cpplib.h to the bare minimum necessary, and then to keep it there. This makes clear exactly what external clients are entitled to assume, and allows us to change internals in the future without worrying whether library clients are perhaps relying on some kind of undocumented implementation-specific behavior.