Иногда бывает, что функция (или метод) имеет параметры, которые не используются в теле. Это может быть legacy или просто плохой дизайн. В этой ситуации хороший компилятор обычно ругается предупреждением.
Можно сделать:
void f(int a, int /* b */) { ... }
Но это как-то некрасиво.
Лучше сделать так:
#define DISCARD_UNUNSED_PARAMETER(x) (void)x void f(int a, int b) { DISCARD_UNUNSED_PARAMETER(b); ... }
Такое объявление наглядно, и можно легко найти все такие места в проекте.
Кстати, компилятор Go считает ошибкой, когда обнаруживается неиспользуемая переменная или подключен неиспользуемый модуль. Сначала это напрягает, так как при экспериментах ты так или иначе постоянно что-то добавляешь, убираешь, комментируешь, возвращаешь назад и т.д. При этом, конечно, появляются такие переменные и модули, и их надо постоянно исправлять. Но в итоге, такой подход не позволяет в коде оставаться мусору, который ты забыл убрать после экспериментов (ну кому охота чистить список подключенных, но возможно неиспользуемых модулей STL, например?).