[PATCH 3/6] Change the OSTC3 macros to have a ; in the end

Dirk Hohndel dirk at hohndel.org
Mon Oct 27 14:30:25 PDT 2014


On Mon, Oct 27, 2014 at 02:13:54PM -0700, Linus Torvalds wrote:
> On Mon, Oct 27, 2014 at 12:37 PM, Anton Lundin <glance at acc.umu.se> wrote:
> >
> > -#define READ_SETTING(_OSTC3_SETTING, _DEVICE_DETAIL) \
> > +#define READ_SETTING(_OSTC3_SETTING, _DEVICE_DETAIL); \
> 
> That extra ';' as the first token in the macro definition seems entirely broken.
> 
> >                         rc = hw_ostc3_device_config_read(m_data->device, _OSTC3_SETTING, uData, sizeof(uData)); \
> >                         if (rc == DC_STATUS_SUCCESS) \
> >                                 m_deviceDetails->_DEVICE_DETAIL(uData[0]);
> 
> I'd also suggest enclosing it all in a "do { } while (0)" (*without* a
> semicolon at the end - the final semicolon should come from the user),
> because otherwise
> 
>     if (x)
>         READ_SETTING(..)
>     else
>         READ_SETTING(..);
> 
> ends up parsing cleanly by the compiler, but doing completely bogus
> crap (the "else" ends up pairing with the "if" inside the macro,
> instead of the "if" in the code).

Needless to say, I agree with both statements. What the heck is that first
semicolon for, Anton?

/D


More information about the subsurface mailing list