Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c

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.

like image 542
daniel Avatar asked Dec 25 '22 21:12

daniel


1 Answers

One way that is a bit of a kludge but it seems to work with gcc:

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

With this method you end up with a struct like this:

struct example_s
{
  u8_t foo;
  int bar[0];
};

which has the correct size (i.e. as size as if bar had not been defined at all).

like image 116
Paul R Avatar answered Jan 04 '23 23:01

Paul R