If you're prepared to get your hands dirty with some C++, there's the Wave parser in Boost, which is built using the Spirit recursive descent parser. It's a complete C pre-processor that conforms to all the latest specs for C and C++ (and, by extension, Objective C, AFAICS).
It's highly modular so you can switch your own driver in that could do the extras you want.
http://www.boost.org/libs/wave/doc/introduction.html