Pergunta

Atualmente estou recebendo avisos do compilador que se assemelham a advertência que dei no título pergunta. Avisos como ....

warning: 'boost::system::generic_category' defined but not used

warning: 'boost::system::posix_category' defined but not used

warning: 'boost::system::errno_ecat' defined but not used

warning: 'boost::system::native_ecat' defined but not used

Tanto quanto eu sei que o programa não está sendo afetado de alguma forma. No entanto, eu não gosto de avisos que penduram ao redor, mas não tenho idéia do que esses avisos são tentando me dizer além de que algo definido e relacionado ao impulso está pendurado em algum lugar não está sendo usado. No entanto, tudo o que eu defini, eu usei. As bibliotecas de impulso que estou usando são a biblioteca aleatória ea biblioteca de sistema de arquivos.

Quando eu verificar a origem do aviso ele traz arquivo error_category.hpp do Boost e destaca algumas static consts que estão comentadas tanto como "categorias de erro predefinidos" ou "sinônimos obsoletas". Talvez o problema tem algo a ver com o meu tratamento de erros (ou falta de) ao usar a biblioteca?

Alguém pode dar alguns insights sobre por que essas advertências estão surgindo? Estou faltando completamente alguma coisa?

P.S. Os avisos são no nível máximo.

Foi útil?

Solução

Trata-se da biblioteca código_erro na biblioteca Boost.System. error_codes impulso conter dois atributos: valores e categorias. A fim de fazer error_codes tão extensível que os usuários da biblioteca podem criar suas próprias categorias de erro, o impulso projetistas precisava de alguma maneira de representar uma categoria de código de erro único. Um simples número ID não seriam suficientes, pois isso poderia resultar em dois projetos usando conflitantes números de identificação para as categorias de erro personalizadas.

Então, basicamente, o que eles fizeram foi para endereços de memória uso, na forma de estática objetos que herdam a error_category classe base. Estas variáveis ??não fazem nada a não ser para servir como identificadores exclusivos de uma determinada categoria de erro. Porque eles são objetos fictícios essencialmente estáticas com endereços únicos na memória, você pode facilmente criar suas próprias categorias de erro personalizadas que não irão interferir com outros categoria de erro "IDs." Consulte aqui para mais informações .

Suponho que o que você está vendo é um efeito colateral desta decisão design. Uma vez que estas variáveis ??não são realmente utilizados em seu programa, o compilador é advertências geradoras. Basta dizer, eu não acho que você está fazendo nada de errado.

Outras dicas

Eu concordo com @Charles Salvia, mas queria acrescentar que, pelo menos a partir de impulso 1.44.0, estas definições estão agora envolto - a ser excluído como obsoleto. Então, se você não estiver usando-los, basta incluir as seguintes linhas antes de incluir o arquivo de cabeçalho:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

Eu tentei o BOOST_SYSTEM_NO_DEPRECATED sugerido por @ M.Tibbits, e parecia para remover algumas instâncias dos avisos (em um sistema grande construído sob linux), mas não todos.

No entanto, usando -isystem vez de -I para incluir os cabeçalhos impulso (e ignorar seus problemas) fez um trabalho para mim.

Sugerido por https://exceptionshub.com/how-do-you-disable-the-unused-variable-warnings-coming-out-of-gcc.html

Explicada (obliquamente) por GNU GCC: http: //gcc.gnu .org / onlinedocs / gcc / Diretório-Options.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top