2009-02-08 11 views
29

Ho avviato un nuovo progetto e ho deciso di assicurarmi che si costruisca in modo pulito con l'opzione/Wall abilitata. L'unico problema non è tutte le librerie 3rd parti (come boost) compilare senza avvertimenti, così ho fatto ricorso a fare questo in un colpo di testa comune:C'è un modo per disattivare tutti gli avvisi 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) 

Questo funziona abbastanza bene, ma ogni volta che aggiungere nuove intestazioni di spinta Devo aggiungere tutti gli avvisi che generano alla lista. C'è un modo per dire disabilitare tutti gli avvertimenti per questo tratto di codice?

risposta

40

Si può spingere/pop un basso livello di avvertimento, in questo modo:

#pragma warning(push, 0)   

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

#pragma warning(pop) 

Ma sanno che non è possibile disabilitare tutte le avvertimenti. Ad esempio, alcuni avvisi del linker sono impossibili da disattivare.

+0

non mi riferisco a condonare necromanzia ma nel tuo commento qui vedo una relazione 1-to-1 con il push/pop di avvertimenti. Se disattivo N avvisi dovrò chiamare pop N volte? Di nuovo, mi dispiace risorgere un vecchio thread. – wheaties

+2

Il numero di avvisi disabilitati è irrilevante. Il numero di "spinte" deve corrispondere al numero di "pop" che è tutto. –

+2

Inoltre, è interessante affermare che se viene utilizzato '#pragma warning (pop)', alcuni avvisi (4514 è un esempio) verranno comunque emessi, probabilmente perché queste condizioni di avviso vengono rilevate in alcuni contesti post-compilazione. – alecov

4

Quello che ho fatto prima è impostata l'opzione "W3" piuttosto che "Wall", allora in ciascuno dei miei propri file sorgente cpp ho messo

#pragma warning(push, 4) 

in alto, dopo tutto il "#include ..." linee e poi

#pragma warning(pop) 

come l'ultima riga del file.

In questo modo si ottengono gli avvisi di livello 4 nel codice e il livello 3 nel codice di terze parti di cui non si può fare nulla.

+1

Sembra essere più utile racchiudere tutti i propri file di codice con una direttiva '#pragma warning' piuttosto che racchiudere la terza parte' # include '. Ma se funziona per te ... –

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

per meno linee ....

#pragma warning (disable : 4820 4619 4668) 
Problemi correlati