Я хотел бы знать, какой переключатель вы передаете компилятору 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
превосходит мою цель?
c++
gcc
compiler-warnings
compiler-flags
WilliamKF
источник
источник
-Werror=no-unused-variable
Ответы:
-Wno-unused-variable
Переключатель обычно делает трюк. Однако это действительно очень полезное предупреждение, если вы заботитесь об этих вещах в своем проекте. Однако становится раздражающим, когда GCC начинает предупреждать вас о вещах, которых нет в вашем коде.Я бы порекомендовал вам оставить предупреждение включенным, но использовать
-isystem
вместо него-I
для включения каталогов сторонних проектов. Этот флаг указывает GCC не предупреждать вас о вещах, которые вы не контролируете.Например, вместо
-IC:\\boost_1_52_0
, скажем-isystem C:\\boost_1_52_0
.Надеюсь, это поможет. Удачи!
источник
-Wno-unused-parameter
для неиспользуемых параметров функции,-Wno-unused-function
для неиспользуемой функции-Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable
Иногда вам просто нужно подавить только некоторые предупреждения, а другие вы хотите сохранить на всякий случай. В своем коде вы можете подавить предупреждения для переменных и даже формальных параметров, используя неиспользуемый атрибут 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 ++, и я думаю, что это можно использовать почти во всех функциях, а не только в обработчиках. Давай, попробуй! ;)
PS: В последнее время я использовал это для подавления предупреждений о сериализации Boosts в шаблоне следующим образом:
template <typename Archive> void serialize(Archive &ar, const unsigned int version __attribute__((unused)))
РЕДАКТИРОВАТЬ: По-видимому, я не ответил на ваш вопрос так, как вам нужно, drak0sha сделал это лучше. Это потому, что я в основном следил за названием вопроса, мое плохое. Надеюсь, это поможет другим людям, попавшим сюда из-за этого титула ... :)
источник
void func(unsigned number, const int)
. Тогда и gcc не будет жаловаться на неиспользуемыеversion
.gcc
версии, которую вы используете. IIRC, мне пришлось использовать его 4 года назад, чтобы подавить предупреждения о неиспользуемыхversion
. ;)Если вы используете gcc и хотите отключить предупреждение для выбранного кода, вы можете использовать директиву компилятора #pragma:
#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-variable" ( your problematic library includes ) #pragma GCC diagnostic pop
Для кода, которым вы управляете, вы также можете использовать,
__attribute__((unused))
чтобы указать компилятору, что определенные переменные не используются.источник
#pragma
Директивы @ Dee'Kej совершенно безопасны, если их обернуть#ifdef some_compiler ... #endif
. Предупреждения - это особенность компилятора, которая не определяется стандартом. Вы не можете подавить предупреждения из кода без#pragma
s.См. Раздел «
man gcc
Параметры предупреждений». Там у вас есть целая кучаunused
Если вы поставите перед любым из них префикс
no-
, это отключит это предупреждение.Более подробное объяснение можно найти в разделе «Параметры запроса или подавления предупреждений».
источник
Использование
-Wno-unused-variable
должно работать.источник
-Wno-error=unused-variable
если вы хотите удалить ошибку и оставить предупреждение.[-Werror=unused-variable]
.Компилятор уже говорит вам, что это не
value
ноvariable
. Вы ищите-Wno-unused-variable
. Также попробуйтеg++ --help=warnings
просмотреть список доступных опций.источник
Вы заходите на сайт Boost Trac и отправляете отчет об ошибке Boost.
Ваше приложение не несет ответственности за удаление предупреждений и ошибок библиотеки. Библиотека отвечает за очистку собственных предупреждений и ошибок.
источник
-Wall
и-Wextra
устанавливает этап в GCC, и последующие-Wno-unused-variable
могут не вступить в силу. Например, если у вас есть:CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -Wall -Wextra \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ -Wno-unused-parameter \ -Wno-unused-variable \ $(INC)
тогда GCC видит инструкцию
-Wall -Wextra
и, кажется, игнорирует-Wno-unused-variable
Вместо этого это может выглядеть так, как показано ниже, и вы получите желаемый эффект от остановки компиляции неиспользуемой переменной:
CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ $(INC)
Есть веская причина, по которой это называется «предупреждение» против «ошибки». Ошибка компиляции только из-за того, что ваш код не завершен (скажем, вы отключаете алгоритм), может привести к поражению.
источник
export IGNORE_WARNINGS=1
Он отображает предупреждения, но продолжает сборку
источник