Re: Doxygen messes up with PRINTF_ATTRIBUTES macro

Dimitri Van Heesch <[email protected]>
Newsgroups gmane.text.doxygen.devel
Message-ID <[email protected]>
Hi Andreas,


On 7 mei 2010, at 21:37, Andreas Schneider wrote:

> On Friday 07 May 2010 20:48:26 you wrote:
>> Hi Andreas,
>>
>> On 7 mei 2010, at 10:32, Andreas Schneider wrote:
>>> Hi,
>>>
>>> I've created API documentation for talloc.samba.org. Doxygen has a
>>> problem
>>> correctly creating documentation for a function which has a printf
>>> attribute
>>> checking at the end using a macro.
>>>
>>> #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__,
>>> a1, a2)))
>>> #else
>>> #define PRINTF_ATTRIBUTE(a1, a2)
>>> #endif
>>> #endif
>>>
>>> void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2);
>>>
>>> It adds the return value of this function to the output of the next.
>>>
>>> void * 	talloc_init (const char *fmt,...) PRINTF_ATTRIBUTE(1
>>>
>>> 	Create a new top level talloc context.
>>>
>>> void *int 	talloc_free (void *ptr)
>>>
>>> 	Free a chunk of talloc memory.
>>>
>>> See http://talloc.samba.org/talloc/doc/html/group__talloc.html
>>>
>>> I can work around the problem using #ifdef DOXYGEN but I think it
>>> should be
>>> fixed in doxygen.
>>
>> You can configure doxygen's preprocessor such that no #ifdef's are
>> needed to
>> parse the code properly.
>
> Do you have an example how to do it?
>

Given this:

--------------------------------------------------------------
#ifdef SOMETHING
#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__,  
a1, a2)))
#else
#define PRINTF_ATTRIBUTE(a1, a2)
#endif

/// Blah
void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2);
--------------------------------------------------------------

This should work:

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = NO
PREDEFINED             =

But you can also use this:

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = YES
PREDEFINED             = PRINTF_ATTRIBUTE(x,y)=

See http://www.stack.nl/~dimitri/doxygen/preprocessing.html for more  
info.
Use doxygen with the -d Preprocessor option to see the result after  
preprocessing.

Regards,
   Dimitri



------------------------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.