Much as I like using UML tools and have benefited from Rose in particular for most of my C++ projects in the last 10-15 years, this type of tool doesn't get you very much when you are working with C code. Rose and its competitors depend upon class relationships to do its modeling - no classes, no modeling.
There are some long established C tools out there but I don't recall much about the major products anymore....if some of them are even in business anymore. Seems to me the "lint" movement spawned some interesting C code analyzers with function browsers, call trees, flow charts, etc.....but a quick review of Gimpel's PC-Lint site finds some good bug prevention features - not much on the analysis features.
Software Through Pictures (StP) had support for structured analysis and design of C code - both forward and reverse engineering....and looks like it still does. Not a cheap tool but a candidate if you need this. Another option is Understand for C/C++. I've used this more recently. From an OOAD/UML perspective, I've sometimes been frustrated with Understand for being not as OO-oriented as I'd like but if analyzing C code it would probably be pretty good. GrammaTech/CodeSurfer is another tool that seems very oriented to the "C" side of "C/C++" analysis but I don't have any personal experience with it - just vague recollections that others have used it. Seems to me that either NuMega BoundsChecker (now DevPartner by CompuWare) or a related tool used to do some good C analysis but a quick review of the DevPartner product site finds only info about C++ and doesn't mention C.