2009-02-08 10 views
29

Comencé un nuevo proyecto y he decidido asegurarme de que se construya limpiamente con la opción/Wall habilitada. El único problema es que no todas las bibliotecas 3 ª parte (como refuerzo) compile sin advertencias, así que he recurrido a hacer esto en una cabecera compartida:¿Hay alguna forma de desactivar todas las advertencias con un pragma?

#pragma warning(push) 

#pragma warning(disable:4820) 
#pragma warning(disable:4619) 
#pragma warning(disable:4668) 
#pragma warning(disable:4625) 
#pragma warning(disable:4626) 
#pragma warning(disable:4571) 
#pragma warning(disable:4347) 
#pragma warning(disable:4640) 
#pragma warning(disable:4365) 
#pragma warning(disable:4710) 
#pragma warning(disable:4820) 
#pragma warning(disable:4350) 
#pragma warning(disable:4686) 
#pragma warning(disable:4711) 
#pragma warning(disable:4548) 

#include <boost/array.hpp> 
#include <boost/assert.hpp> 
#include <boost/assign.hpp> 
#include <boost/bind.hpp> 
#include <boost/lexical_cast.hpp> 
#include <boost/filesystem.hpp> 
#include <boost/foreach.hpp> 
#include <boost/format.hpp> 
#include <boost/function.hpp> 
#include <boost/integer.hpp> 
#include <boost/optional.hpp> 
#include <boost/regex.hpp> 
#include <boost/smart_ptr.hpp> 
#include <boost/algorithm/string.hpp> 
#include <boost/tuple/tuple.hpp> 
#include <boost/utility.hpp> 
#include <boost/variant.hpp> 

#pragma warning(pop) 

Esto funciona bastante bien, pero cada vez que añadir nuevas cabeceras de impulso Tengo que agregar las advertencias que generan a la lista. ¿Hay alguna manera de decir deshabilitar todas las advertencias para este tramo de código?

Respuesta

40

Usted puede empujar/pop un bajo nivel de advertencia, como esto:

#pragma warning(push, 0)   

#include <boost/bind.hpp> 
#include <boost/shared_ptr.hpp> 
// ... 

#pragma warning(pop) 

Pero sabemos que no es posible desactivar todas las advertencias. Por ejemplo, algunas advertencias del enlazador son imposibles de desactivar.

+0

no me refiero a tolerar la nigromancia pero en su comentario aquí veo una relación 1 a 1 con el empuje/pop de las advertencias. Si desactivo N advertencias tendré que llamar pop N veces? De nuevo, siento resucitar un hilo viejo. – wheaties

+2

El número de advertencias que deshabilita es irrelevante. El número de 'empujones' tiene que coincidir con el número de 'pops', eso es todo. –

+2

Además, es interesante indicar que si se usa '#pragma warning (pop)', algunas advertencias (4514 es un ejemplo) seguirán emitiéndose, probablemente porque estas condiciones de advertencia se detectan en algún contexto de compilación posterior. – alecov

4

Lo que he hecho antes de que se establezca la opción "W3" en lugar de "pared" a continuación, en cada una de mis propios archivos .cpp fuente puse

#pragma warning(push, 4) 

en la parte superior después de todo el "# include ... "líneas y luego

#pragma warning(pop) 

como la última línea del archivo.

De esta manera obtienes advertencias de nivel 4 en tu código y nivel 3 en código de terceros que no puedes hacer nada al respecto.

+1

Parece ser más útil ajustar cada uno de sus propios archivos de código con una directiva '#pragma warning' que simplemente envolver al tercero ofensor' # includes'. Pero si funciona para ti ... –

17
#pragma warning(disable:4820) 
#pragma warning(disable:4619) 
#pragma warning(disable:4668) 

de menos líneas ....

#pragma warning (disable : 4820 4619 4668) 
Cuestiones relacionadas