#define UNUSED(X) (void)X
Этот макрос используют для подавления предупреждения компилятора о неиспользуемой переменной или неиспользуемом параметре функции.
#define UNUSED(x) (void)x
...
void f(int var)
{
UNUSED(var);
... /* в этой функции переменная var не используется */
}
Или в библиотеке HAL STM32
#define __HAL_RCC_GPIOC_CLK_ENABLE() do { \
__IO uint32_t tmpreg; \
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);\
/* Delay after an RCC peripheral clock enabling */\
tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);\
UNUSED(tmpreg); \
} while(0U)
В gcc-компиляторе параметр функции можно пометить атрибутом: __attribute__ ((unused)). Это означает что переменная возможно не будет использована в теле функции и компилятор не выдаст предупреждение.
void f(__attribute__ ((unused)) int var)
{
... /* в этой функции переменная var не используется */
}
В MSVC __attribute__ ((unused)) работать не будет
UNUSED работает только с базовыми типами переменных. Не работает с элементами массива и [скорей всего, не проверял] не работает с указателями.
Встречается конструкция #define UNUSED(x) ((x)=(x)), которая должна поддерживаться любым компилятором, но её испрользование не рекомендуется.
В C++17 (в С не поддерживается) введён атрибут [[maybe_unused]] для переменных, которые используются только в assert (конструкциях, проверяющих произвольные данные в любом месте программы).
//-- старый код
auto result = f();
(void)result; // подавляем предупреждение о неиспользуемой переменной
assert(result > 0);
//-- новый код
[[maybe_unused]] auto result = f();
assert(result > 0);