[patch] moving macro definitions to defaults.h

Joseph S. Myers joseph@codesourcery.com
Mon Sep 22 17:02:00 GMT 2014

On Mon, 22 Sep 2014, Andrew MacLeod wrote:

> Josephs solution was to identify these and instead put a default definition in
> default.h ...  then change all the uses to #if instead.. ie,
> #if BLAH
> This way we can ensure that the definition has been seen and it will be a
> compile error if not.

No, my suggestion was that whenever possible we should change preprocessor 
conditionals - #ifdef or #if - into C conditionals - "if (MACRO)".

Changing from #ifdef to #if does nothing to make a missing tm.h include 
produce an error - the undefined macro simply quietly gets treated as 0 in 
preprocessor conditionals.  To get an error from #if in such cases, you'd 
need to build GCC with -Wundef (together with existing -Werror), and I'd 
guess there are plenty of places that are not -Wundef clean at present.

Now, I think moves of defaults to defaults.h are generally a good idea, 
and that moving from defined/undefined to true/false semantics are also a 
good idea - even if the way the macro is used means you can't take the 
further step of converting from #if to if ().  They don't solve the 
problem of making a missing tm.h include immediately visible, but they 
*do* potentially help with future automatic refactoring to convert target 
macros into hooks.

Obviously such moves do require checking the definitions and uses of the 
macros in question; you need to make sure you catch all places that use 
#ifdef / #if defined etc. on the macro (and make sure they have the same 
default).  And if you're changing the semantics of the macro from defined 
/ undefined to true / false, you need to watch out for any existing 
definitions with an empty expansion, or an expansion to 0, etc.

Joseph S. Myers

More information about the Gcc-patches mailing list