Документиране на макро функции в C++ с Doxygen

Как да документирам макро функция в C++ с помощта на Doxygen и да се позова на нея в документацията на моя не-Evil код?

По-конкретно, имам някакъв нормален клас, наречен „Съобщение“, дефиниран в Message.H, от който потребителите могат да наследяват, за да дефинират свои собствени съобщения. В друг файл ("MessageHelpers.H") имам луд макрос като този:

//! Users must call this macro to register their messages...
/*! 
   ...lest they be forced to type all sorts of boring and 
   error-prone boiler plate code. 
   blah blah blah... More specific documentation and explanation...
*/
#define REGISTER_MESSAGE_TYPE(MSGTYPE) \
 do_some(MSGTYPE);                     \
 seriously();                          \
 crazy_stuff(MSGTYPE);                       

В документацията за Message ще се радвам, ако фразата „REGISTER_MESSAGE_TYPE“ може автоматично да стане връзка и да сочи към моята документация за макроса. напр.

//! A cool message class
/*! 
   Users can inherit from this class to create their own cool messages.
   Just be sure to call REGISTER_MESSAGE_TYPE after your class definition!
*/
class Message
{
  virtual void doSomeStuff();
};

Възможно ли е това?


person rcv    schedule 27.12.2010    source източник


Отговори (1)


Вижте http://www.doxygen.nl/manual/index.html

разделът „Специални команди“ изброява \def команда и раздел „Автоматично генериране на връзка“ описва какво искате да свържете към макроса.

Използвайте \def, за да документирате макрос отделно от декларацията.
Използвайте #MACRO(params) за автоматично свързване към споменатата дефиниция на макрос.

person Guerrero    schedule 27.12.2010
comment
Това не работи за мен.. Опитах се да копирам ABS макроса от примера тук stack.nl/~dimitri/doxygen/autolink.html, но не е генерирана документация и препратката в моя код #ABS(x) не е свързана. Трябва да правя нещо нередно в моя конфигурационен файл? - person rcv; 28.12.2010
comment
Не знам дали това е вашият проблем, но се уверете, че документирате файла някъде, където е дефиниран макросът. Опитайте или /*! \file / или /* @file */ и вижте дали doxygen е генерирал някакви предупреждения. Източникът е stack.nl/~dimitri/doxygen/docblocks.html търсене за глобални обекти. (редактиране - символите със звезда наклонена черта изглежда не работят, но трябва да са многоредови маркери за коментари) - person Guerrero; 28.12.2010
comment
Да, имам /*! @file filename.h описание... */ в горната част на всеки файл.. Интересно е, че моята дефиниция на макрос изобщо не се показва в моята документация MessageHelpers.H. - person rcv; 28.12.2010
comment
Използвайки интерфейса на Doxygen GUI, ако отида в раздела Expert, темата Preprocessor и премахна отметката от ENABLE_PREPROCESSING, той спира да документира пробата... Но след това получавам Предупреждение: изричната заявка за връзка към „ABS(x)“ не може да бъде разрешена в изхода. Съжалявам, че не можах да бъда полезен повече. - person Guerrero; 28.12.2010
comment
Аха! ENABLE_PREPROCESSING свърши работа, благодаря за помощта. - person rcv; 28.12.2010