[MINC-development] Where to add generic new private macro?

Andrew Janke a.janke at gmail.com
Thu Jan 16 17:36:20 EST 2014


Best bet is then probably libsrc/minc_private.h

Vladimir, do you have a preference?


a

On 17 January 2014 08:31, Sean McBride <sean at rogue-research.com> wrote:
> Andrew,
>
> Thanks for your reply.  print_error() is just an example of a function that will need that decoration, there looks like there will be a few others too.  That's why I thought it might make sense in some kind of general header that's included by most everything else (if there is such a thing).
>
> Sean
>
>
> On Fri, 17 Jan 2014 08:25:49 +1000, Andrew Janke said:
>
>>Hi Sean,
>>
>>Looks like you have having hilarious fun. Given the print_error macro
>>is a David McDonald harbinger and restricted to volume_io it probably
>>makes sense to just put your macro above that of print_error.
>>
>>minc2 itself does errors differently (libsrc2/minc2_error.c), this in
>>itself looks like a re-implementation of perror and friends but I
>>digress.
>>
>>
>>
>>a
>>
>>On 17 January 2014 05:44, Sean McBride <sean at rogue-research.com> wrote:
>>> Hi all,
>>>
>>> I'm working on fixing warnings in MINC as shown by the ITK dashboard.
>>>
>>> I have a fix for the print_error() function, which is a printf-like
>>thing.  I need to add the following somewhere, but don't know where:
>>>
>>> /* To allow gcc and clang to warn upon mismatch of format string and
>>parameters. */
>>> #if !defined(MINC_FORMAT_FUNCTION)
>>>         #if defined(__GNUC__) && (__GNUC__ >= 4)
>>>                         #define MINC_FORMAT_FUNCTION(func, p1, p2)
>>__attribute__((format(func, p1, p2)))
>>>         #else
>>>                         #define MINC_FORMAT_FUNCTION(func, p1, p2)
>>>         #endif
>>> #endif
>>>
>>> then I can change print_error() to be declared like so:
>>>
>>> VIOAPI  void  print_error( char format[], ... )
>>MINC_FORMAT_FUNCTION(printf, 1, 2);
>>>
>>> That'll fix a warning and allow gcc/clang to check uses of
>>print_error() itself and give additional warnings like:
>>>
>>> libminc/volume_io/Prog_utils/alloc.c:247:62: warning: format specifies
>>type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat]
>>>         print_error( "Cannot alloc 1D array of %d bytes.\n", n_bytes );
>>>                                                ~~            ^~~~~~~
>>>                                                %lu
>>>
>>>
>>> Where should I put this MINC_FORMAT_FUNCTION macro?  It could be
>>useful throughout minc, so maybe some kind of header that's used everywhere?
>>>
>>> Thanks,
>
>


More information about the MINC-development mailing list