How to have good C code - 

- Be Disciplined About Namespace Management
- Clearly Document Published APIs
- Keep Data Types Abstract
- Use Polymorphism Judiciously
- Prefer Modularisation Over Conditional Compilation
- The Best Way to Modularise a Large C Codebase is Don't Have a Large C Codebase!

http://www.natpryce.com/articles/000799.html