Макрос для неиспользуемых параметров

Иногда бывает, что функция (или метод) имеет параметры, которые не используются в теле. Это может быть 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, например?).


Disclaimer

Комментарии