Как отключить предупреждения неиспользуемой переменной, выходящие из gcc?

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

C:\boost_1_52_0/boost/system/error_code.hpp: At global scope:
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable]

Я попытался использовать как -Wunused-value, так и -Wno-unused-value, но не подавил вышеприведенные сообщения.

Какая правильная команда, вот моя строка компиляции:

g++  -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion 
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated 
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 
-c -o op.o op.cpp

Возможно, -Wall переопределяет мою цель?

Ответ 1

Переключатель -Wno-unused-variable обычно выполняет трюк. Тем не менее, это очень полезное предупреждение, действительно, если вы заботитесь об этих вещах в своем проекте. Это становится раздражающим, когда GCC начинает предупреждать вас о вещах, не входящих в ваш код.

Я бы порекомендовал вам сохранить предупреждение, но вместо -I используйте -isystem для включения каталогов сторонних проектов. Этот флаг сообщает GCC не предупреждать вас о том, что у вас нет контроля.

Например, вместо -IC:\\boost_1_52_0, скажем -isystem C:\\boost_1_52_0.

Надеюсь, это поможет. Удачи!

Ответ 2

Иногда вам просто нужно подавить только некоторые предупреждения, и вы хотите сохранить другие предупреждения, чтобы быть в безопасности. В коде вы можете подавлять предупреждения для переменных и даже формальных параметров с использованием неиспользуемого атрибута GCC. Допустим, у вас есть этот фрагмент кода:

void func(unsigned number, const int version)
{
  unsigned tmp;
  std::cout << number << std::endl;
}

Может возникнуть ситуация, когда вам нужно использовать эту функцию в качестве обработчика, что (imho) довольно распространено в библиотеке С++ Boost. Затем вам понадобится второй формальный параметр version, поэтому сигнатура функции совпадает с тем, что требуется обработчику, иначе компиляция завершится с ошибкой. Но вам это действительно не нужно и в самой функции...

Решение о том, как отмечать переменную или формальный параметр, который следует исключить из предупреждений, таков:

void func(unsigned number, const int version __attribute__((unused)))
{
  unsigned tmp __attribute__((unused));
  std::cout << number << std::endl;
}

GCC имеет много других параметров, вы можете проверить их на страницах руководства. Это также работает для программ C, а не только для С++, и я думаю, что он может использоваться почти для каждой функции, а не только для обработчиков. Идите и попробуйте!;)

P.S.: В последнее время я использовал это для подавления предупреждений о сериализации Boosts в шаблоне следующим образом:

template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))

EDIT: По-видимому, я не ответил на ваш вопрос по вашему желанию, drak0sha сделал это лучше. Это потому, что я в основном следил за титулом вопроса, мой плохой. Надеюсь, это может помочь другим людям, которые попадают сюда из-за этого названия...:)

Ответ 3

Если вы используете gcc и хотите отключить предупреждение для выбранного кода, вы можете использовать директиву компилятора #pragma:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop

Для управляемого кода вы также можете использовать __attribute__((unused)), чтобы проинструктировать компилятор о том, что определенные переменные не используются.

Ответ 4

См. man gcc в разделе "Параметры предупреждения". Там у вас есть целая группа unused

Параметры предупреждения
... -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable

Если вы префикс какой-либо из них с помощью no-, он отключит это предупреждение.

Многие параметры имеют длинные имена, начинающиеся с -f или с -W --- например, -fmove-loop-инварианты, -Wformat и т.д. Большинство из них имеют как положительные, так и отрицательные формы; отрицательная форма -ffoo будет -fno-foo. В этом руководстве содержится только одна из этих двух форм, в зависимости от того, какой из них не является значением по умолчанию.

Более подробное объяснение можно найти в Параметры запроса или подавления предупреждений

Ответ 5

Используйте -Wno-unused-variable.

Ответ 6

Компилятор уже говорит вам, что это не value, а variable. Вы ищете -Wno-unused-variable. Кроме того, попробуйте g++ --help=warnings, чтобы просмотреть список доступных параметров.

Ответ 7

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

Вы посещаете Boost Trac и сообщаете отчет об ошибке с Boost.

Ваше приложение не несет ответственности за очистку предупреждений и ошибок библиотеки. Библиотека отвечает за очистку собственных предупреждений и ошибок.

Ответ 8

Удалите -Wall, и он должен работать. Проблема с удалением -Wall заключается в том, что он также подавит законные предупреждения. Вам придется вручную выбрать опции -W в этом случае или изменить на -Wno-unused-variable после того, как у вас будут все предупреждения.

LOCAL_CFLAGS = -Wno-unused-variable -g

Ответ 9

export IGNORE_WARNINGS=1

Он отображает предупреждения, но продолжается с помощью сборки