[Python-Dev] Py_DECREF causes spurious gcc warning

Zack Weinberg zack at codesourcery.com
Fri Dec 19 13:08:52 EST 2003


martin at v.loewis.de (Martin v. Löwis) writes:

> "Zack Weinberg" <zack at codesourcery.com> writes:
>
>> > This is what leads to the bletcherous
>> >
>> >     do {
>> >         the real macro guts go here
>> >     } while(0)
>> >
>> > form of macro definition.  Py_DECREF could be rewritten in that form -- but
>> > I've puked enough for one day <splat>.
>> 
>> Should, not just could.  Yeah, it's bletcherous, but it's the only
>> way to be sure.  (Short of inline functions.)
>
> Not true. As Tim explains, there is no possible application of the
> macro which gets misinterpreted. We don't have a single if-statement,
> we have an if-else-statement in the macro. That never leads to the
> dangling else problem.

It does, however, lead to a different problem:

  if (condition)
    Py_DECREF (foo);
  else               // oops, syntax error here
    ...

In general I consider it appropriate to wrap _all_ macros that don't
return a value in do { ... } while (0), because that way you don't
have to worry about which of them truly need it.

zw



More information about the Python-Dev mailing list