On Fri, Oct 04, 2019 at 02:26:26PM -0600, Jeff Law wrote:
> Same objections as before.  As long as we're using macros like this,
> we're going to have increased potential for shadowing problems and
> macros which touch implementation details that just happen to be
> available in the context where the macro is used.
> 
> Convert to real functions.  It avoids the shadowing problem and avoids
> macros touching/referencing things they shouldn't.  Code in macros may
> have been reasonable in the 80s/90s, but we should know better by now.
> 
> I'm not ranting against you Bernd, it's more a rant against the original
> coding style for GCC.  Your changes just highlight how bad of an idea
> this kind of macro usage really is.  We should take the opportunity to
> fix this stuff for real.

To get 95% of the benefit for only 2% of the pain, you can make an inline
function where there was a macro before, and define that same macro to
just call the function.

Like

#define DEFAULT_SOME_MACRO(PARMS) { lots of code }

becomes

#define DEFAULT_SOME_MACRO(PARMS) default_some_macro(PARMS)

static inline int
default_some_macro (int parm, long another)
{
  lots of code;
}

The point is that all this is completely *local* changes.


Segher

Reply via email to