Search code examples
carmcc

Warning: "extra ; ignored" by using C macros with ARMCC


My compiler raises the warning #381-D: extra ";" ignored in such a situation:

I have a struct defined, like the following

struct example_s
{
  u8_t foo;
  SOME_MACRO(bar);
};

The macro SOME_MACRO(x) does the following:

#if defined(SYSTEM_A)
  #define SOME_MACRO(x) u16_t x##something
#else
  #define SOME_MACRO(x)    /* nothing */
#endif

Of course, the warning is correct, when SYSTEM_A is not defined. Simply because I have now a ; within the struct. But does someone know a way to avoid it correctly? I don't want to break the typical C-style by moving the ; into the macro.


Solution

  • You can add an unnamed 0-width bitfield instead:

    #if defined(SYSTEM_A)
      #define SOME_MACRO(x) u16_t x##something
    #else
      #define SOME_MACRO(x)    unsigned :0
    #endif