Универсальный независимый от компилятора способ реализации макроса UNUSED в C/С++
При реализации заглушек и т.д. вы хотите избежать предупреждений "неиспользуемой переменной". На протяжении многих лет я сталкивался с несколькими альтернативами макросов UNUSED(), но ни один из них не доказал, что он работает для "всех" компиляторов или тот, который по стандарту является герметичным.
Или мы застряли с блоками #ifdef для каждой платформы сборки?
РЕДАКТИРОВАТЬ: Из-за большого количества ответов с альтернативами, отличными от c-compliant, я хотел бы уточнить, что я ищу определение, которое действительно для C и С++, все вкусы и др.
Ответы
Ответ 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
Универсальный способ заключается не в том, чтобы включать предупреждения, предупреждающие о спаме, для четко-правильного кода. Любая опция предупреждения "неиспользуемая переменная", включающая аргументы функции в ее анализе, просто неверна и должна быть остановлена. Не засоряйте свой код от уродства до тихих сломанных компиляторов.
Вы также можете попробовать отправить отчет об ошибках поставщику/поставщику компилятора.