See the series of articles starting with http://blog.llvm.org/2011/05/what-every-c-programmer-should-...