https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48778

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |msebor at gcc dot gnu.org

--- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> ---
(In reply to Peter Eisentraut from comment #0)
> I don't think this is really helpful.  Macros like in the above example are
> not uncommon, and there is no obvious way to write the code better.

A better way (in that it doesn't elicit the warning) to write buflen() is as an
inline function, perhaps while leaving the buflen macro in place:

  #define buflen(b) ((b) == NULL ? 0 : (b)->len)
  static inline size_t (buflen)(const buf *b) { return buflen (b); }

Then users of buflen have a choice of calling either the function (by
parenthesizing the name) or the macro (without the parentheses).  This practice
is codified in the C standard where C library functions may be (also) defined
as macros this way.

I would rather not compromise the GCC warning since it's possible to make the
opposite argument: that not issuing the warning for macros is unhelpful.

Reply via email to