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

Каков наилучший способ подавить "Неиспользуемая переменная x"?

Каков наилучший/опрятный способ подавления компилятора (в данном случае gcc), например, "Неиспользуемая переменная x" -warning?

Я не хочу давать какие-либо определенные флаги gcc для удаления всех этих предупреждений только для особых случаев.

4b9b3361

Ответ 1

Нашел статью 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)) 

Ответ 2

(void) variable может работать для некоторых компиляторов.

Для кода С++ также см. http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/, где Herb Sutter рекомендует использовать:

template<class T> void ignore( const T& ) { }

...

ignore(variable);

Ответ 3

Не указывать переменную имя (С++)

void foo(int /*bar*/) {
    ...
}

Расскажите своему компилятору, используя специальный нестандартный механизм компилятора

См. индивидуальные ответы для __attribute__((unused)), различных #pragma и т.д. Необязательно, оберните вокруг него макрос препроцессора для переносимости.

Выключить предупреждение

IDE могут визуально сигнализировать неиспользуемые переменные (разные цвета или подчеркивание). Имея это, предупреждение компилятора может быть бесполезным.

В GCC и Clang добавьте параметр -Wno-unused-parameter в конце командной строки (после всех параметров, которые включают включение неиспользуемого параметра, например -Wall, -Wextra).

Добавить литье в void

void foo(int bar) {
    (void)bar;
}

в соответствии с ответом jamesdlin и http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/

Ответ 4

Если это действительно то, что вы хотите, вы можете использовать неиспользуемый атрибут (только gcc), что-то вроде:

void foo(int __attribute__((__unused__)) bar) {
    ...
}

Не только для параметров функции, конечно, но и для наиболее распространенного варианта использования, поскольку это может быть функция обратного вызова для API, где вам действительно не нужен весь вход.

Кроме того, GLib имеет макрос G_GNUC_UNUSED, который, я считаю, расширяется до этого атрибута.

Ответ 5

Вы можете отключить предупреждение, используя #pragma

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused"

int unususedVariable = 1;

#pragma clang diagnostic pop

Если вы используете GCC, используйте #pragma gcc ...

Ответ 6

#pragma unused <variable>

Ответ 7

Это очень хакерское решение, но попробовали ли вы просто присвоить переменную самому себе? Я думаю, что это должно обмануть большинство компиляторов, думая, что эта переменная используется. Должно быть довольно портативным тоже.

Ответ 8

Назначьте это себе.

void f(int unused) {
    unused = unused;
}

Работает в gcc, но clang -Wno-self-assign.

Ответ 9

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

Тем не менее, если вам это не нужно, избавитесь от него.;)

Ответ 10

Удалить декларацию неиспользуемой переменной из кода. (каламбур)

(Что это я делаю: указывайте, что очевидное, скорее всего, лучшее решение.)

Теперь из комментариев к другим ответам, по-видимому, это мусор, созданный из макросов. Ну, это pleonasm.

Решения:

  • refactor, что макрос в #if объявляет переменную, только если она действительно используется;
  • создайте другую версию макроса, которая пропускает неиспользуемую генерацию переменных.
  • Еще лучше, избегайте использования макросов, которые приносят проблемы в код.

Ответ 11

Если используется, и вы отправляете проект, удалите его. Худший комментарий.