You might consider Semantic Designs (my company) family of Smart Differencers.
The Smart Differencer parses source text for two files to be compared using a language (and even dialect, e.g, VisualStudio 2010) accurate parser, builds a tree, and then finds a minimal distance tree edit to explain how they are different, in terms of the grammar. This means reporting deltas such as "changed expression", "moved statement", "renamed variable" using precise line and column information. Because it uses a parser, it ignores changes in whitespace (although you can ask it to consider comments as non-white-space as an option).
It runs natively under Windows, seamlessly on Linux under Wine using provided sh scripts. It is commercial. The output is diff-like because it is a diff tool, rather than having a GUI.
Smart Differencer works with many languages. For the C version, it has some difficulties parsing C source with awkwardly placed macros and/or preprocessor conditionals; note that it is trying to parse source files without the context of the complete compilation unit you normally feed a compiler. System header files tend to be be pretty bad here but rarely does one want to compare these. You can ameliorate these by providing it with some hints about things that are macros; if you are willing to modify your source code a little bit, once, by moving awkward conditionals you can pretty much solve this problem.
Not exactly what OP wants, but the core of it seems to match.