Я хотел бы знать, какой коммутатор вы передаете компилятору 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
Он отображает предупреждения, но продолжается с помощью сборки