Gostaria de saber que opção você passa para o compilador gcc para desligar os avisos de variáveis não utilizadas. Estou recebendo erros do boost no windows e não quero mexer no código do boost:
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]
Tentei usar ambos -Wunused-value
e, -Wno-unused-value
mas nenhum suprimiu as mensagens acima.
Qual é o comando correto, 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
supere meu objetivo?
c++
gcc
compiler-warnings
compiler-flags
WilliamKF
fonte
fonte
-Werror=no-unused-variable
Respostas:
A
-Wno-unused-variable
troca geralmente funciona. No entanto, esse é um aviso muito útil se você se preocupa com essas coisas em seu projeto. Porém, torna-se irritante quando o GCC começa a avisá-lo sobre coisas que não estão em seu código.Eu recomendaria que você mantivesse o aviso ativado, mas use em
-isystem
vez de-I
para incluir diretórios de projetos de terceiros. Essa bandeira 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
, digamos-isystem C:\\boost_1_52_0
.Espero que ajude. Boa sorte!
fonte
-Wno-unused-parameter
para parâmetros de função não utilizados,-Wno-unused-function
para função não utilizada-Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable
Às vezes, você só precisa suprimir alguns avisos e deseja manter outros avisos, apenas por segurança. Em seu código, você pode suprimir os avisos de variáveis e até mesmo parâmetros formais usando o atributo não utilizado do GCC . Digamos que você tenha este snippet de código:
Pode haver uma situação em que você precise usar esta função como um manipulador - o que (imho) é bastante comum na biblioteca C ++ Boost. Em seguida, você precisa da segunda versão formal do parâmetro , de modo que a assinatura da função seja a mesma que o modelo que o manipulador requer, caso contrário, a compilação falhará. Mas você realmente não precisa disso na função em si ...
A solução para marcar a variável ou o parâmetro formal a ser excluído dos avisos é esta:
O GCC tem muitos outros parâmetros, você pode verificá-los nas páginas de manual . Isso também funciona para programas C, não apenas C ++, e acho que pode ser usado em quase todas as funções, não apenas em manipuladores. Vá em frente e experimente! ;)
PS: Recentemente, usei isso para suprimir avisos de serialização de Boosts no modelo como este:
EDIT: Aparentemente, eu não respondi sua pergunta conforme você precisava, drak0sha fez melhor. É porque eu segui principalmente o título da pergunta, meu mal. Esperançosamente, isso pode ajudar outras pessoas, que chegam aqui por causa desse título ... :)
fonte
void func(unsigned number, const int)
. Então, o gcc também não reclamará do não usoversion
.gcc
versão que você está usando. IIRC, eu tive que usá-lo 4 anos atrás, para suprimir avisos sobre não usadosversion
. ;)Se você estiver usando o gcc e quiser desativar o aviso do código selecionado, poderá usar a diretiva do compilador #pragma:
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.fonte
#pragma
diretivas @ Dee'Kej são perfeitamente seguras se você envolvê-las#ifdef some_compiler ... #endif
. Os avisos são um recurso específico do compilador e não são definidos pelo padrão. Você não pode suprimir nenhum aviso do código sem#pragma
s.Veja
man gcc
em Opções de Aviso. Lá você tem um monte deunused
Se você prefixar qualquer um deles com
no-
, esse aviso será desativado.Uma explicação mais detalhada pode ser encontrada em Opções para solicitar ou suprimir avisos
fonte
O uso
-Wno-unused-variable
deve funcionar.fonte
-Wno-error=unused-variable
se você deseja remover o erro e manter o aviso.[-Werror=unused-variable]
.O compilador já está dizendo a você, não é
value
masvariable
. Você está procurando-Wno-unused-variable
. Além disso, tenteg++ --help=warnings
ver uma lista de opções disponíveis.fonte
Você visita o Trac do Boost e arquiva um relatório de bug contra o Boost.
Seu aplicativo não é responsável por limpar avisos e erros da biblioteca. A biblioteca é responsável por limpar seus próprios avisos e erros.
fonte
-Wall
e-Wextra
define o cenário no GCC e o subsequente-Wno-unused-variable
pode não ter efeito. Por exemplo, se você tem: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)
então o GCC vê a instrução
-Wall -Wextra
e parece ignorar-Wno-unused-variable
Em vez disso, pode ter a seguinte aparência abaixo e você obtém o efeito desejado de não ser interrompido em sua compilação na variável não utilizada:
CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ $(INC)
Há um bom motivo para ser chamado de "aviso" em vez de "erro". Deixar de compilar apenas porque seu código não está completo (digamos que você está removendo o algoritmo) pode ser frustrante.
fonte
Ele exibe avisos, mas continua com a construção
fonte