Я хотел бы знать, какой ключ вы передаете компилятору 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
отменяет мою цель?
-Wno-unused-variable
Переключатель обычно делает свое дело. Тем не менее, это действительно очень полезное предупреждение, если вы заботитесь об этих вещах в своем проекте. Это становится раздражающим, когда GCC начинает предупреждать вас о вещах, которых нет в вашем коде.
Я бы порекомендовал вам сохранить предупреждение, но используйте -isystem
вместо -I
для включения в каталоги сторонних проектов. Этот флаг говорит GCC не предупреждать вас о вещах, которые вы не можете контролировать.
Например, вместо -IC:\\boost_1_52_0
, сказать -isystem C:\\boost_1_52_0
,
Надеюсь, поможет. Удачи!
Иногда вам просто нужно подавить только некоторые предупреждения, и вы хотите сохранить другие предупреждения, просто чтобы быть в безопасности. В вашем коде вы можете подавить предупреждения для переменных и даже формальных параметров, используя 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 сделал это лучше. Это потому, что я в основном следовал названию вопроса, мой плохой. Надеюсь, это может помочь другим людям, которые попали сюда из-за этого названия … 🙂
Если вы используете gcc и хотите отключить предупреждение для выбранного кода, вы можете использовать директиву компилятора #pragma:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"( your problematic library includes )
#pragma GCC diagnostic pop
Для кода, который вы контролируете, вы также можете использовать __attribute__((unused))
чтобы указать компилятору, что определенные переменные не используются.
Увидеть man gcc
под опциями предупреждения. Там у вас есть целая куча unused
Параметры предупреждения
… -Wunused -Wunused-функция -Wunused-метка -Wunused-параметр -Wunused-значение -Wunused-переменная -Wunused-но-набор-параметр -Wunused-но-набор-переменная
Если вы префикс любого из них с no-
, это отключит это предупреждение.
Многие параметры имеют длинные имена, начинающиеся с -f или с -W — например, -fmove-loop-invariants, -Wformat и так далее. Большинство из них имеют как положительные, так и отрицательные формы; отрицательной формой -ffoo будет -fno-foo. Это руководство документирует только одну из этих двух форм, какая из них не используется по умолчанию.
Более подробное объяснение можно найти на Варианты запроса или подавления предупреждений
использование -Wno-unused-variable
должно сработать.
Компилятор уже говорит вам, это не value
но variable
, Ты ищешь -Wno-unused-variable
, Также попробуйте g++ --help=warnings
чтобы увидеть список доступных вариантов.
Как отключить предупреждения о неиспользуемых переменных, выходящих из gcc?
Я получаю ошибки из-за надстройки на Windows, и я не хочу трогать код наддува …
Ты посещаешь Boost’s Trac и подать отчет об ошибке в Boost.
Ваше приложение не несет ответственности за очистку библиотечных предупреждений и ошибок. Библиотека отвечает за очистку собственных предупреждений и ошибок.
Удалить -Wall
и это должно работать. Проблема с удалением -Wall
Это также будет подавлять законные предупреждения. Вы должны были бы вручную выбрать -W
варианты в этом случае или изменить на -Wno-unused-variable
как только у вас будут все предупреждения.
LOCAL_CFLAGS = -Wno-unused-variable -g