Object Oriented C
An excellent article about how to use encapsulation and polymorphism in C programs.
Note that these techniques are basically what the first C++ compilers used (they were purely preprocessors which generated C code). Similar techniques are also used in parts of Linux (such as the filesystems subsystem).