Object oriented programming with ANSI-C (1993) [pdf]
The first chapter, on abstraction and information hiding, is probably the most important. Every programmer should know how to do it. It's one of C's main strengths that it allows abstract data types so easily. ADTs in fact allow better binary compatibility since you only expose pointers as your public API, not structures of different shapes and sizes.<p>I'm continually surprised by how often people insist on putting struct definitions right in their header files, defeating the whole idea of type abstraction.