Так что я нашел это macro на SO:НЕИСПОЛЬЗУЕМЫЙ макрос предупреждение
#define UNUSED(x) (void)(sizeof((x), 0))
и это (по-прежнему) дает следующее предупреждение:
main.c: 11: 36: предупреждение: левый операнд выражения запятой не имеет никакого эффекта [-Wunused-значения] #define НЕИСПОЛЬЗУЕМЫЙ (х) (недействительными) (SizeOf ((х), 0))
в то время как более простой вариант, нормальный void
литье: #define UNUSED(x) (void)(x)
не содержит предупреждений.
В чем причина этого? В целом предупреждения являются признаком ситуаций высокого риска. Действительно ли данное предупреждение действительно полезно?
Меня интересует C-пояснение.
Макрос, который вы показываете, используя оператор запятой, не вызывает оценку 'x' во время выполнения, а с помощью' (void) (x) 'is. Если 'x' имеет некоторый побочный эффект, то это произойдет с вашей версией макроса. –