tradcpp is a traditional (K&R-style) preprocessor. It has the particular property that it doesn't (for the most part) trash whitespace, so it can be used on makefiles.