Como suprimir avisos do GCC dos headers da biblioteca?

Eu tenho um projeto que usa log4cxx, boost, etc. bibliotecas cujos headers geram muitos avisos (repetitivos). Existe uma maneira de suprimir os avisos da biblioteca inclui (ou seja, #include ) ou inclui de certos caminhos? Eu gostaria de usar -Wall e / ou -Wextra como de costume no código do projeto sem que informações relevantes sejam obscurecidas. Eu atualmente uso o grep no make output, mas gostaria de algo melhor.

Você pode tentar include headers de biblioteca usando -isystem vez de -I . Isso os tornará “headers de sistema” e o GCC não reportará avisos para eles.

Para aqueles que usam o CMake, você pode modificar suas diretivas include_directories para include o símbolo SYSTEM que suprime os avisos contra tais headers.

 include_directories(SYSTEM "${LIB_DIR}/Include") ^^^^^^ 

Você pode usar pragmas. Por exemplo:

 // save diagnostic state #pragma GCC diagnostic push // turn off the specific warning. Can also use "-Wall" #pragma GCC diagnostic ignored "-Wunused-but-set-variable" #include  #include  #include  #include  // turn the warnings back on #pragma GCC diagnostic pop 

Eu encontrei o truque. Para biblioteca inclui, em vez de -Idir use -isystem dir no makefile. O GCC, em seguida, trata o boost, etc., conforme o sistema inclui e ignora quaisquer avisos deles.

#pragma são instruções para o compilador. você pode definir algo antes do #include e desativá-lo depois.

Você também pode fazer isso na linha de comando .

Outra página do GCC especificamente sobre a desativação de avisos .

Eu escolheria a opção de usar # pragma’s dentro do código-fonte e, em seguida, fornecer um motivo de som (como comentário) do motivo pelo qual você está desabilitando os avisos. Isso significaria raciocinar sobre os arquivos de headers.

O GCC aborda isso classificando os tipos de aviso. Você pode classificá-los como avisos ou ser ignorado. Os artigos anteriormente vinculados mostrarão quais avisos podem estar desabilitados.

Nota: você também pode massagear o código-fonte para evitar certos avisos usando atributos ; no entanto, isso o liga muito de perto ao GCC.

Nota 2: O GCC também usa a interface pop / push usada no compilador da Microsoft – a Microsoft desativa os avisos através desta interface. Eu sugiro que você investigue isso ainda mais, já que não sei se é possível.

Você pode tentar usar headers pré-compilados . Avisos não vão embora, mas pelo menos não aparecerão na sua compilation principal.

Se você precisar replace explicitamente um header de sistema, estará restrito a pragmas. Você pode verificar quais includes você está usando via make depend output.

Veja também push-pop de diagnóstico para gcc> = 4.6

Deve haver razões para esses avisos. Estes serão causados ​​por erros no seu código que usa a biblioteca ou por erros no próprio código da biblioteca. No primeiro caso, corrija seu código. No segundo caso, pare de usar a biblioteca ou se for código FOSS, corrija-o.

Intereting Posts