¿Cómo suprimir las advertencias de GCC de los encabezados de las bibliotecas?

Tengo un proyecto que usa las bibliotecas log4cxx, boost, etc. cuyos encabezados generan muchas advertencias (repetitivas). ¿Hay alguna manera de suprimir las advertencias de la biblioteca incluye (es decir, #include ) o incluye desde ciertas rutas? Me gustaría usar -Wall y / o -Wextra como de costumbre en el código del proyecto sin que se oculte información relevante. Actualmente uso grep en make output pero me gustaría algo mejor.

Puede intentar incluir encabezados de biblioteca usando -isystem lugar de -I . Esto los convertirá en “encabezados del sistema” y GCC no informará las advertencias para ellos.

Para aquellos que usan CMake, puede modificar sus directivas include_directories para incluir el símbolo SYSTEM que suprime las advertencias contra dichos encabezados.

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

Puedes usar pragmas. Por ejemplo:

 // 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 

Encontré el truco. Para la biblioteca incluye, en lugar de -Idir use -isystem dir en el archivo MAKE. GCC luego trata el impulso, etc., ya que el sistema incluye e ignora las advertencias de ellos.

#pragma son instrucciones para el comstackdor. puede establecer algo antes de #include y deshabilitarlo después.

También puedes hacerlo en la línea de comando .

Otra página de GCC específicamente sobre la desactivación de advertencias .

Me decantaría por la opción de usar # pragma dentro del código fuente, y luego proporcionaría una razón válida (como un comentario) sobre por qué está desactivando las advertencias. Esto significaría un razonamiento sobre los archivos de encabezados.

GCC aborda esto clasificando los tipos de advertencia. Puede clasificarlos para que sean advertencias o para ser ignorados. Los artículos vinculados anteriormente le mostrarán qué advertencias pueden estar deshabilitadas.

Nota: también puede masajear el código fuente para evitar ciertas advertencias mediante el uso de atributos ; sin embargo, esto lo vincula bastante estrechamente con GCC.

Nota 2: GCC también usa la interfaz pop / push como se usa en el comstackdor de Microsoft: Microsoft desactiva las advertencias a través de esta interfaz. Sugiero que investigue esto más a fondo, ya que no sé si es posible.

Puede intentar usar encabezados precomstackdos . Las advertencias no desaparecerán, pero al menos no aparecerán en tu comstackción principal.

Si necesita anular explícitamente un encabezado del sistema, entonces está restringido a pragmas. Puede verificar qué incluye lo que está utilizando a través de la salida make depend .

Ver también push-pop de diagnóstico para gcc> = 4.6

Debe haber razones para esas advertencias. Esto se debe a errores en el código que usa la biblioteca o a errores en el código de la biblioteca. En el primer caso, arregla tu código. En el segundo caso, o bien deja de usar la biblioteca o si es código FOSS, arréglelo.