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

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

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 отменяет мою цель?

82

Решение

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

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

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

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

206

Другие решения

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

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

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

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

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

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

П.С .: В последнее время я использовал это для подавления предупреждений о сериализации Boosts в шаблоне, например так:

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

РЕДАКТИРОВАТЬ: Очевидно, я не ответил на ваш вопрос, как вам нужно, drak0sha сделал это лучше. Это потому, что я в основном следовал названию вопроса, мой плохой. Надеюсь, это может помочь другим людям, которые попали сюда из-за этого названия … 🙂

65

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

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

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

60

Увидеть man gcc под опциями предупреждения. Там у вас есть целая куча unused

Параметры предупреждения
… -Wunused -Wunused-функция -Wunused-метка -Wunused-параметр -Wunused-значение -Wunused-переменная -Wunused-но-набор-параметр -Wunused-но-набор-переменная

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

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

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

14

использование -Wno-unused-variable должно сработать.

9

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

3

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

Ты посещаешь Boost’s Trac и подать отчет об ошибке в Boost.

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

2

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

LOCAL_CFLAGS = -Wno-unused-variable -g
-3
По вопросам рекламы [email protected]