tecnica reporte relations productos investor grupo fundacion ficha direcciones chihuahua cementos cemento anual gcc warnings suppress-warnings gcc-warning

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



grupo cementos de chihuahua reporte anual (8)

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.

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 <some-header.h>) 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.


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.


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") ^^^^^^


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


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 <boost/uuid/uuid.hpp> #include <boost/uuid/uuid_generators.hpp> #include <boost/uuid/uuid_io.hpp> #include <boost/lexical_cast.hpp> // turn the warnings back on #pragma GCC diagnostic pop


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


#pragma son instrucciones para el compilador. 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 classifying 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 attributes ; sin embargo, esto lo vincula bastante estrechamente con GCC.

Nota 2: GCC también usa la interfaz pop / push como se usa en el compilador 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 incluir encabezados de biblioteca usando -isystem lugar de -I . Esto los convertirá en "encabezados del sistema" y GCC no informará las advertencias para ellos.