Каков наилучший способ подавления «Неиспользуемой переменной x» - предупреждение [дубликат]

У этого вопроса уже есть ответ здесь:

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

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

52
задан Cœur 28 July 2017 в 21:50
поделиться

7 ответов

Нашли статья http://sourcefrog.net/weblog/software/languages/C/unused.html , объясняющая НЕИСПОЛЬЗУЕМЫЕ. Интересно, что автор также искажает неиспользуемое имя переменной, чтобы вы не могли случайно использовать его в будущем.

Выдержка:

#ifdef UNUSED
#elif defined(__GNUC__)
# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
#elif defined(__LCLINT__)
# define UNUSED(x) /*@unused@*/ x
#else
# define UNUSED(x) x
#endif

void dcc_mon_siginfo_handler(int UNUSED(whatsig)) 
22
ответ дан 7 November 2019 в 09:19
поделиться

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

2
ответ дан 7 November 2019 в 09:19
поделиться

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

(Что ??? Это то, что я делаю: укажите, что очевидное, скорее всего, лучшее решение.)

Теперь, судя по комментариям к другим ответам, очевидно, что это мусор, созданный из макросов. Что ж, плеоназм.

Решения:

  • рефакторинг этого макроса, чтобы #if объявлять переменную только в том случае, если она действительно используется;
  • создать другую версию макроса, которая пропускает создание неиспользуемой переменной.
  • Еще лучше избегать использования макросов, которые вызывают проблемы в коде.
-9
ответ дан 7 November 2019 в 09:19
поделиться

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

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

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

...

ignore(variable);
43
ответ дан 7 November 2019 в 09:19
поделиться

#pragma unused <переменная>

3
ответ дан 7 November 2019 в 09:19
поделиться

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

-9
ответ дан 7 November 2019 в 09:19
поделиться

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

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

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

Кроме того, в GLib есть макрос G_GNUC_UNUSED, который, как я полагаю, расширяет этот атрибут.

13
ответ дан 7 November 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: