Cómo suprimir advertencias en encabezados externos en Visual C++
visual-c++ suppress-warnings (3)
El equipo de Visual C ++ acaba de agregar compatibilidad con los niveles de advertencia en los encabezados externos. Puede encontrar los detalles en su publicación de blog: Broken Warnings Theory .
En esencia, hace automáticamente lo que las sugerencias aquí se recomiendan hacer manualmente: empuja el nuevo nivel de advertencia justo antes de la directiva #include y aparece inmediatamente después. Hay indicadores adicionales para especificar ubicaciones de encabezados externos, indicador para tratar todo <> incluye como externo, #pragma system_header y una función no disponible en Clang o GCC (a partir de este escrito) para ver advertencias en encabezados externos a través de la pila de instanciación de plantillas cuando la plantilla fue instanciada en el código de usuario.
Además de los comentarios en esa publicación, también puede encontrar alguna discusión útil en un anuncio de reddit para esa publicación .
Estoy comenzando un nuevo proyecto BREW, y me gustaría compilar con Warning Level 4 (/ W4) para mantener el código de la aplicación limpio y agradable. El problema es que los encabezados BREW no compilan limpiamente con / W4.
En gcc, puede diferenciar entre los encabezados de la aplicación y del sistema utilizando -I y -isystem, y luego, de manera predeterminada, gcc no informa ninguna advertencia de compilación en los encabezados del sistema. ¿Hay un mecanismo equivalente en Visual C ++?
No creo que Visual C ++ te permita diferenciar. Puedes simularlo mediante el uso de la #pragma warning
alrededor del include:
#pragma warning(push, 0)
#include "mywarningheader.h"
#pragma warning(pop)
Solo use este método alrededor de un bloque de encabezados que no puede cambiar, pero que debe incluir.
Puede desactivar selectivamente y temporalmente todas las advertencias como esta:
#pragma warning(push, 0)
//Some includes with unfixable warnings
#pragma warning(pop)
En lugar de 0, puede opcionalmente pasar el número de advertencia para deshabilitar, por lo que algo como:
#pragma warning( push )
#pragma warning( disable : 4081)
#pragma warning( disable : 4706 )
// Some code
#pragma warning( pop )