Ваш код не совсем правильный, я предлагаю вам вставить пустые скобки в ваш макрос
#define somemacro(a) {}
причина проста, ваш код будет намного безопаснее!
возьмите этот пример:
if(Value)
somemacro(a)
else
somemacro(b)
Если макрос пуст, ваш код не скомпилируется! (Ожидаемое первичное выражение перед "else"). В любом случае определенные правила стиля заставляют вас писать
if(Value)
{
somemacro(a)
}
else
{
somemacro(a)
}
так что проблем не будет.
Другой вариант - использовать ";" вместо "{}", но эта опция в том же случае даст вам предупреждения времени компиляции, в то время как пустые скобки не будут давать предупреждений или ошибок! (точка с запятой все же лучше, даже если давать предупреждения);)
взять следующий случай
if(value)
somemacro(a);
else
somemacro(b);
расширится до
if(value)
{};
else
{};
который не может скомпилироваться!
Вот почему макросы злые
(поскольку макросы представляют собой простую замену текста, правило ознаменований должно заключаться в том, чтобы всегда пытаться вручную заменить код и видеть, что происходит, существуют также инструменты, которые заменят макросы для вас, показывая расширенный код.)
Все еще догадываетесь, если существует макрос, который является полностью безопасным? Да, это называется "NOP"
#define somemacro(a) ((void)0)
, который будет работать в любом случае (например, даже исходные файлы компиляторов используют это как NOP
просто посмотрите на "assert.h"