organization of this directory is moving towards this approach: .h -- public API and data types _private.h -- protected API and data types .c -- implementation and private API / types The rules are: .c files may include *_private.h. .h files may not include *_private.h This allows us to have a nicely encapsulated C api with opaque data types and private functions that are nonetheless shared between source files without redundant extern declarations..