Doxygen is a cross platform open source code documentation tool which I’ve used for both Visual C++ and C# .NET projects. It produces awesome documentation and is very easy to use. Configuration is straight forward using the DoxyWizard application.
Doxygen can be configured to use Graphviz to produce graphs. After installing Graphiz you’ll need to configure it’s path in DoxyWizard.
It supports multiple documentation conventions, the one I use most frequently is the Xml Comments found in .NET, for example:
/// <summary>
/// Creates a Command which will get the last auto-generated Id in a table.
/// Note: Client is responsible for deleting the command.
/// <summary>
/// <param name="table">The name of the database table.</param>
/// <returns>A pointer to a Command.</returns>
/// <exception cref="DataException">Thrown if the table is empty.</exception>
Command * CreateGetLastIdCommand(const std::string & table);
Produces this documentation:
For more information on the .NET Xml Comments, see this excellent cheat sheet.

