Поместите документацию в ваши заголовки.И одна очень важная вещь, на которую стоит обратить внимание, это не передержка.Не начинайте писать комментарии для каждой переменной и функции, особенно если все, что вы делаете, это заявляете очевидное.Примеры ...
Этот комментарий ниже очевиден и бесполезен.Все комментарии говорят совершенно ясно, просто взглянув на функцию.
/**
This function does stuff with a prime number. */
void do_stuff(int prime);
Вместо этого вам следует задокументировать, как функция ведет себя в экстремальных ситуациях.Например, что он делает, если параметры неверны?Если он возвращает указатель, то кто несет ответственность за его удаление?Что еще нужно учитывать программистам при использовании этой функции?и т.д.
/**
This function does stuff with a prime number.
\param prime A prime number. The function must receive only primes, it
does not check the integer it receives to be prime.
*/
void do_stuff(int prime);
Кроме того, я бы посоветовал вам только документировать интерфейс в заголовочных файлах: не говорите о как функция что-то делает, скажитетолько что делает.Если вы хотите объяснить фактическую реализацию, я бы поместил некоторые соответствующие (нормальные) комментарии в исходный файл.