Your code is not totally correct, I suggest you to put empty braces in your macro
#define somemacro(a) {}
the reason is simple, you code will be much more safe!
take this example:
if(Value)
somemacro(a)
else
somemacro(b)
If the macro is empty, your code will not compile! (Expected primary-expressione before "else"). Anyway certain style rules force you to write
if(Value)
{
somemacro(a)
}
else
{
somemacro(a)
}
so that will not be a problem.
Another option is to use ";" instead of "{}" but that option in the same case will give you compile time warnings, while empty braces will not give warnings nor errors! (semicolon is still better even if give warnings) ;)
take following case
if(value)
somemacro(a);
else
somemacro(b);
will expand to
if(value)
{};
else
{};
that can't compile!
That's why macros are evil
(since macros are simple text-replacement, the rule of dumbs should be to always try to manually replace the code and see what happens, there are also tools that will replace macros for you showing the expanded code.)
Still guessin if there is a macro that is totally safe? Yes it is called "NOP"
#define somemacro(a) ((void)0)
that will work in any case (even source files of compilers use that as NOP, for example
just look at "assert.h"