Подтвердить что ты не робот

Универсальный независимый от компилятора способ реализации макроса UNUSED в C/С++

При реализации заглушек и т.д. вы хотите избежать предупреждений "неиспользуемой переменной". На протяжении многих лет я сталкивался с несколькими альтернативами макросов UNUSED(), но ни один из них не доказал, что он работает для "всех" компиляторов или тот, который по стандарту является герметичным.

Или мы застряли с блоками #ifdef для каждой платформы сборки?

РЕДАКТИРОВАТЬ: Из-за большого количества ответов с альтернативами, отличными от c-compliant, я хотел бы уточнить, что я ищу определение, которое действительно для C и С++, все вкусы и др.

4b9b3361

Ответ 1

В соответствии с этим ответом от пользователя пользователя GMan типичным способом является передача в void:

#define UNUSED(x) (void)(x)

но если x помечен как volatile, который обеспечит чтение из переменной и, таким образом, будет иметь побочный эффект, и поэтому реальный способ почти гарантировать отсутствие-op и подавить предупреждение компилятора:

// use expression as sub-expression,
// then make type of full expression int, discard result
#define UNUSED(x) (void)(sizeof((x), 0))

Ответ 2

В С++ просто закомментируйте имена.

void MyFunction(int /* name_of_arg1 */, float /* name_of_arg2*/)
{
  ...
}

Ответ 3

Универсальный способ заключается не в том, чтобы включать предупреждения, предупреждающие о спаме, для четко-правильного кода. Любая опция предупреждения "неиспользуемая переменная", включающая аргументы функции в ее анализе, просто неверна и должна быть остановлена. Не засоряйте свой код от уродства до тихих сломанных компиляторов.

Вы также можете попробовать отправить отчет об ошибках поставщику/поставщику компилятора.