Pregunta

Al desarrollar una aplicación C ++, tuve que usar una biblioteca de terceros que produjo una gran cantidad de advertencias relacionadas con una directiva #pragma inofensiva que se está utilizando.

../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
                 from ../File3.hpp:57,
                 from File4.h:49,

¿Es posible desactivar este tipo de advertencias cuando se usa el compilador GNU C ++?

¿Fue útil?

Solución

Creo que puedes compilar con

-Wno-unknown-pragmas

para suprimir estos.

Otros consejos

En GCC, compile con -No-desconocido-pragmas

En MS Visual Studio 2005 (esta pregunta no está etiquetada con gcc, por lo que estoy agregando esto como referencia), puedes deshabilitarlo globalmente en Configuración del proyecto - > C / C ++ - > Advanced. Ingrese 4068 en " Deshabilitar advertencias específicas "

o puede agregar esto a cualquier archivo para deshabilitar las advertencias localmente

#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */

Quizás vea Pragmas de diagnóstico de GCC ? Alternativamente, en este caso, puede utilizar la combinación de opciones ese -Wall habilita, excluyendo -Wunknown-pragmas .

Gracias a todos por la sugerencia. En mi caso, trabajo con Qt Mingw. Necesito establecer la marca de otra manera, en mi archivo .PRO:

QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas

Sé que la pregunta es sobre GCC, pero para las personas que desean hacer esto de la manera más portátil posible:

La mayoría de los compiladores que pueden emitir esta advertencia tienen una forma de deshabilitar la advertencia desde la línea de comandos (excepción: PGI) o en el código (excepción: DMC):

  • GCC: -Wno-unknown-pragmas / #pragma GCC diagnóstico ignorado " -Wunknown-pragmas "
  • clang: -Wno-unknown-pragmas / #pragma clang diagnostic ignorado " -Wunknown-pragmas "
  • Compilador Intel C / C ++: -diag-disable 161 / #pragma warning (disable: 161)
  • IGP: #pragma diag_suppress 1675
  • MSVC: -wd4068 / #pragma warning (deshabilitar: 4068)
  • TI: --diag_suppress, -pds = 163 / #pragma diag_suppress 163
  • Compilador IAR C / C ++: --diag_suppress Pe161 / #pragma diag_suppress = Pe161
  • Compilador Digital Mars C / C ++: -w17

Puedes combinar la mayor parte de esto en una sola macro para usar en tu código, que es lo que hice para el HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS en la macro Hedley :

#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif HEDLEY_TI_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif

Tenga en cuenta que Hedley puede tener información más completa que esta respuesta ya que probablemente me olvidaré de actualizar esta respuesta, por lo que si no quiere usar Hedley (es un encabezado de C / C ++ de dominio público único, puede soltarlo) en su proyecto) es posible que desee utilizar Hedley como guía en lugar de la información anterior.

Las comprobaciones de versión son probablemente demasiado pesimistas, pero a veces es difícil obtener buena información sobre versiones obsoletas de compiladores propietarios, y prefiero estar seguro que lamentarme. Una vez más, la información de Hedley puede ser mejor.

Muchos compiladores también pueden insertar / colocar advertencias en una pila, por lo que puede presionarlas, deshabilitarlas antes de incluir el código que no controla, y luego colocarlas para que su código siga activando la advertencia. Pregunta (para que puedas limpiarlo). También hay macros para eso en Hedley: HEDLEY_DIAGNOSTIC_PUSHcode> / HEDLEY_DIAGNOSTIC_POP .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top