Каков наилучший/опрятный способ подавления компилятора (в данном случае gcc), например, "Неиспользуемая переменная x" -warning?
Я не хочу давать какие-либо определенные флаги gcc для удаления всех этих предупреждений только для особых случаев.
Каков наилучший/опрятный способ подавления компилятора (в данном случае gcc), например, "Неиспользуемая переменная x" -warning?
Я не хочу давать какие-либо определенные флаги gcc для удаления всех этих предупреждений только для особых случаев.
Нашел статью http://sourcefrog.net/weblog/software/languages/C/unused.html, которая объясняет UNUSED. Интересно, что автор также искажает имя неиспользуемой переменной, поэтому вы не можете непреднамеренно использовать его в будущем.
Выдержки:
#ifdef UNUSED
#elif defined(__GNUC__)
# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
#elif defined(__LCLINT__)
# define UNUSED(x) /*@[email protected]*/ x
#else
# define UNUSED(x) x
#endif
void dcc_mon_siginfo_handler(int UNUSED(whatsig))
(void) variable
может работать для некоторых компиляторов.
Для кода С++ также см. http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/, где Herb Sutter рекомендует использовать:
template<class T> void ignore( const T& ) { }
...
ignore(variable);
void foo(int /*bar*/) {
...
}
См. индивидуальные ответы для __attribute__((unused))
, различных #pragma
и т.д. Необязательно, оберните вокруг него макрос препроцессора для переносимости.
IDE могут визуально сигнализировать неиспользуемые переменные (разные цвета или подчеркивание). Имея это, предупреждение компилятора может быть бесполезным.
В GCC и Clang добавьте параметр -Wno-unused-parameter
в конце командной строки (после всех параметров, которые включают включение неиспользуемого параметра, например -Wall
, -Wextra
).
void foo(int bar) {
(void)bar;
}
в соответствии с ответом jamesdlin и http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/
Если это действительно то, что вы хотите, вы можете использовать неиспользуемый атрибут (только gcc), что-то вроде:
void foo(int __attribute__((__unused__)) bar) {
...
}
Не только для параметров функции, конечно, но и для наиболее распространенного варианта использования, поскольку это может быть функция обратного вызова для API, где вам действительно не нужен весь вход.
Кроме того, GLib имеет макрос G_GNUC_UNUSED, который, я считаю, расширяется до этого атрибута.
Вы можете отключить предупреждение, используя #pragma
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused"
int unususedVariable = 1;
#pragma clang diagnostic pop
Если вы используете GCC, используйте #pragma gcc ...
#pragma unused <variable>
Это очень хакерское решение, но попробовали ли вы просто присвоить переменную самому себе? Я думаю, что это должно обмануть большинство компиляторов, думая, что эта переменная используется. Должно быть довольно портативным тоже.
Назначьте это себе.
void f(int unused) {
unused = unused;
}
Работает в gcc, но clang -Wno-self-assign.
Приведение к пустоте - лучший подход, потому что это показывает, что вы не "случайно" сохранили переменную в своем коде, т.е. эта функция может быть экземпляром, где у вас есть таблица указателей функций, которые нуждаются в том же типы параметров и типы возвращаемых данных, но в этой конкретной записи таблицы вы не используете параметр.
Тем не менее, если вам это не нужно, избавитесь от него.;)
Удалить декларацию неиспользуемой переменной из кода. (каламбур)
(Что это я делаю: указывайте, что очевидное, скорее всего, лучшее решение.)
Теперь из комментариев к другим ответам, по-видимому, это мусор, созданный из макросов. Ну, это pleonasm.
Решения:
Если используется, и вы отправляете проект, удалите его. Худший комментарий.