ti-enxame.com

Como você desativa os avisos de variáveis ​​não utilizados que saem do gcc em código de terceiros que eu não desejo editar?

Gostaria de saber qual opção você passa para o compilador gcc para desativar os avisos de variáveis ​​não utilizados? Estou recebendo erros do reforço no Windows e não quero tocar no código de aumento:

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]

Eu tentei usar -Wunused-value e -Wno-unused-value mas não suprimi as mensagens acima.

Qual é o comando certo, aqui está minha linha de compilação:

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

Talvez o -Wall substitua o meu objetivo?

81
WilliamKF

O switch -Wno-unused-variable geralmente faz o truque. No entanto, esse é um aviso muito útil, de fato, se você se preocupa com essas coisas em seu projeto. Torna-se irritante quando o GCC começa a avisar sobre coisas que não estão no seu código.

Recomendamos que você mantenha o aviso ativado, mas use -isystem em vez de -I para incluir diretórios de projetos de terceiros. Esse sinalizador diz ao GCC para não avisá-lo sobre as coisas sobre as quais você não tem controle.

Por exemplo, em vez de -IC:\\boost_1_52_0, diga -isystem C:\\boost_1_52_0.

Espero que ajude. Boa sorte!

213
user405725

Às vezes você só precisa suprimir apenas alguns avisos e deseja manter outros avisos, apenas para estar seguro. Em seu código, você pode suprimir os avisos de variáveis ​​e até parâmetros formais usando o atributo não usado do GCC. Vamos dizer que você tem esse trecho de código:

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

Pode haver uma situação, quando você precisar usar essa função como um manipulador - o qual (imho) é bastante comum na biblioteca C++ Boost. Então você precisa do segundo parâmetro formal versão , então a assinatura da função é a mesma que o modelo que o manipulador requer, caso contrário a compilação falharia. Mas você também não precisa disso na função em si ...

A solução como marcar variável ou o parâmetro formal a ser excluído dos avisos é este:

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

O GCC tem muitos outros parâmetros, você pode verificá-los no man pages. Isso também funciona para os programas em C, não apenas em C++, e eu acho que ele pode ser usado em quase todas as funções, não apenas em manipuladores. Vá em frente e experimente! ;)

P.S .: Ultimamente eu usei isso para suprimir avisos de serialização de Boosts em modelos como este:

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

EDIT: Aparentemente, eu não respondi a sua pergunta como você precisava, drak0sha feito melhor. É porque eu segui principalmente o título da pergunta, meu mal. Espero que isso possa ajudar outras pessoas, que chegam aqui por causa desse título ... :)

69
Dee'Kej

Se você estiver usando o gcc e quiser desativar o aviso para o código selecionado, poderá usar a diretiva de compilador #pragma:

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

Para o código que você controla, você também pode usar __attribute__((unused)) para instruir o compilador que variáveis ​​específicas não são usadas.

62
Ole Wolf

Veja man gcc em Opções de Aviso. Lá você tem um monte de unused

Opções de aviso
... -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-mas-set-parameter -Wunused-mas-conjunto-variável

Se você prefixar qualquer um deles com no-, ele desativará este aviso.

Muitas opções têm nomes longos começando com -f ou com -W --- por exemplo, -fmove-loop-invariants, -Wformat e assim por diante. A maioria destes tem formas positivas e negativas; a forma negativa de -ffoo seria -fno-foo. Este manual documenta apenas um desses dois formulários, o que não é o padrão.

Explicação mais detalhada pode ser encontrada em Opções para solicitar ou suprimir avisos

15
Olaf Dietsche

Use -Wno-unused-variable deve funcionar.

9
Mats Petersson

Como você desativa os avisos de variáveis ​​não utilizados que saem do gcc?
Estou recebendo erros de reforço no Windows e não quero tocar no código de aumento ...

Você visita Boost's Trac e arquiva um relatório de bug contra o Boost.

Seu aplicativo não é responsável pela limpeza de avisos e erros da biblioteca. A biblioteca é responsável por limpar seus próprios avisos e erros.

3
jww

O compilador já está dizendo, não é value mas variable. Você está procurando -Wno-unused-variable. Além disso, tente g++ --help=warnings para ver uma lista de opções disponíveis.

3
Daniel Frey