Categories: C/C++

doxygen/

Программисты, как правило, не очень любят писать тесты . Но куда сильнее они не любят писать документацию. Тесты хотя бы представляют собой программы, а документация — это что? Просто текст. Вот пусть кто-нибудь другой его и пишет, технические писатели, например. Впрочем, если речь идет не о пользовательской документации, а об описании классов и методов, предназначенном для других программистов, тут откосить вряд ли удастся. К счастью, есть Doxygen , способный существенно помочь со столь неприятной для многих работой.

Fun fact! Несмотря на то, что в рамках этого поста мы будем говорить о Doxygen исключительно в контексте языков C и C++, он также поддерживает языки Java, Python, PHP, и другие.

Установка Doxygen осуществляется как-то так:

# если у вас Ubuntu:
sudo apt-get install doxygen

# если у вас Arch Linux:
sudo pacman -S doxygen

Далее переходим в каталог с нашим проектом и создаем шаблонный файл Doxyfile командой:

doxygen -g

В Doxyfile содержится краткое описание проекта, его версия и подобные вещи. Следующие значения стоит сразу изменить.

Имя проекта:

PROJECT_NAME           = «Project Name»

Версия проекта:

PROJECT_NUMBER         = 0.1

Краткое описание проекта:

PROJECT_BRIEF          = «Yet another NoSQL DBMS»

Куда писать сгенеренные доки:

OUTPUT_DIRECTORY       = doxygen

Отключаем LaTeX, так как HTML обычно достаточно:

GENERATE_LATEX         = NO

Где искать файлы, из которых генерировать документацию — список файлов и директорий через пробел:

INPUT                  = src include

Включаем рекурсивный обход директорий:

RECURSIVE              = YES

Всего в файле около 2500 строк с подробным описанием всех параметров. Однако помимо приведенных выше параметров вам вряд ли придется что-то менять.

Правила хорошего тона гласят, что для каждой процедуры или метода класса (независимо от того, публичные они или приватные) должно быть как минимум краткое описание того, что делает процедура или метод, описание каждого из аргументов, а также описание возвращаемого значения. Если метод делает еще что-то, например, как-то меняет состояние класса, это также обязательно нужно задокументировать.

Аналогично, краткое описание того, что они из себя представляют, должно быть у самих классов и структур. Не лишним будет рассказать, является ли класс копируемым или thread-safe. Краткое описание должно быть у каждого атрибута класса.

Рассмотрим пример:

/**
* @brief Entry point
*
* Execution of the program
* starts here.
*
* @param argc Number of arguments
* @param argv List of arguments
*
* @return Program exit status
*/

int main ( int argc , char ** argv ) {

Doxygen генерирует документацию из комментариев, начинающихся с /** или /*! . Поддерживаются и другие метки , но, по моим наблюдениям, на практике они используются реже.

Для обозначения того, к чему именно относится часть комментария, используются специальные тэги. В терминологии Doxygen они зовутся командами. Команды начинаются со знака @ или . К наиболее частым командам я бы лично отнес следующие:

  • @brief — краткое описание метода или класса;
  • @param foo — описание аргумента foo процедуры или метода;
  • @return — описание возвращаемого значения;
  • @class Foo — описание конкретного класса Foo ;
  • @file fname — описание конкретного файла;
  • @mainpage Title — комментарий содержит текст для титульного листа документации;
  • @see Ref — ссылка на связанный класс или метод;
  • @throws Foo или @exception Foo — метод бросает исключение Foo ;
  • @warning — предупреждение. Очень ярко выделяется в документации, трудно не заметить;
  • @private — пометить класс или метод, как приватный. Удобно, когда не хочется палить в документации какие-то детали реализации;
  • @todo — что-то нужно доделать. Doxygen генерирует отдельную страницу со списком всех @todo ;
  • @deprecated — помечает класс или метод устаревшим. Как и с @todo , Doxygen генерирует отдельную страницу со списком всех устаревших классов и методов;

В действительности, Doxygen поддерживает куда больше команд. Например, он позволяет писать многостраничную ( @page ) документацию с разделами ( @section ) и подразделами ( @subsection ), указывать версии методов и классов ( @version ), и не только. Ознакомиться с полным списком команд можно здесь .

Fun fact! Doxygen понимает Markdown в комментариях. Краткую шпаргалку по Markdown вы найдете в заметке про создание статического блога на Pelican .

Для генерации и просмотра документации просто говорим:

doxygen
firefox doxygen / html / index.html

В качестве примеров можно порекомендовать документацию на libevent или wxWidgets . Любой проект куда проще поддерживать, если у него есть такая же классная документация.

Дополнение: Вас также может заинтересовать пост Построение UML-диаграмм с помощью PlantUML . В Doxygen имеется поддержка PlantUML.

admin

Share
Published by
admin
Tags: C/C++

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

1 месяц ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

1 месяц ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

1 месяц ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

1 месяц ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

1 месяц ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

1 месяц ago