Независимый от компилятора способ реализации макроса UNUSED в C / C ++ - PullRequest
16 голосов
/ 31 января 2011

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

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

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

Ответы [ 3 ]

32 голосов
/ 31 января 2011

Согласно этому ответу от пользователя GMan типичный способ заключается в void:

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

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

// use expression as sub-expression,
// then make type of full expression int, discard result
#define UNUSED(x) (void)(sizeof((x), 0))
1 голос
/ 31 января 2011

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

void MyFunction(int /* name_of_arg1 */, float /* name_of_arg2*/)
{
  ...
}
0 голосов
/ 31 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...