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

Apple: история логотипа

Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…

6 дней ago

Security Boot Fail при загрузке Acer — решение проблемы

Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…

3 недели ago

Ноутбук не включается — варианты решения

Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…

3 недели ago

The AC power adapter wattage and type cannot be determined — причины и решение

The AC power adapter wattage and type cannot be determined — причины и решение При…

3 недели ago

Свистит или звенит блок питания компьютера — причины и решения

Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…

3 недели ago

Мигает Caps Lock на ноутбуке HP — почему и что делать?

Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…

3 недели ago