I strongly recommend DoxyGen - http://www.stack.nl/~dimitri/doxygen/
While I insist on proper design documentation (usually Open Office) before coding begins and prefer it to be kept up to date, I accept that it is often difficult to find the time to do so.
We have a better chance (but no guarantee) of keeping source code and documentation in synch if the documentation is generated from the code.
If you ever take over someone else's code, run it through DoxyGen, you will learn a lot.
However, DoxyGen really shows its worth when you add specially formatted comments to the code. Nothing too fancy, just
/** Description of function
* @param [in] inoutParam - description
* @param [out] outputParam - description
* @return returnValue - description
*/
That sort of thing. It is easy enough to keep up to date. But DoxyGen also generates things like call trees to show where a function is called from, class trees, to show inheritance in C++ and lots of hyperlinks (if a parameter is of an enum, you can jump to the declaration of that enum, etc).
Take a look at the web site and I think you will like it.
Of course, no single solution is enough, I would suggest using DoxyGen together with other methods.