2009-11-16 16 views
6

In genere mi piace avere molti avvisi abilitati durante la programmazione. Tuttavia, alcune librerie contengono codice che causa facilmente avvertimenti (.., python, Qt, ..). Durante la compilazione con gcc, posso semplicemente usare -isystem anziché -I per silenziarlo. Come posso fare lo stesso con il compilatore MS? Conosco l'avviso #pragma, ma mi piacerebbe una soluzione che non coinvolga il codice specifico del compilatore dappertutto. So anche che posso disattivare avvertimenti specifici, ma non è quello che voglio.-isistema per compilatore MS Visual Studio C++

BTW: iSystem dovrebbe essere un tag di questo problema, ma non mi è stato permesso di farlo ..

SOMMARIO: voglio vedere tutte avvertimenti da mio codice, e non avvertimenti da esterno codice.

risposta

1

No, MSVC non ha un valore equivalente a -isystem.


guardare l'uscita in uscita da cl /? :

/WD disabilitare gli avvisi n

/Trattiamo avviso n come un errore

/wo Invia avviso n una volta

/set w livello di avviso 1-4 per n

Si noti che questo disabilita gli avvisi per l'intero progetto; Ricordo che quando usavo Qt preferivo cambiare la sua intestazione principale con la disabilitazione di avviso #pragma e abilitarla di nuovo alla fine in modo da poter vedere ancora tutti gli avvertimenti per la mia fonte.

Modifica l'autore modificato la sua domanda, risposta aggiornato: non v'è alcun modo per ottenere il codice con avvertimenti e codice di Qt senza avvisi utilizzando flag di compilazione: come hai intenzione di dire al compilatore ciò che è 'la tua' codice?

Nota che le bandiere di cui sopra possono essere applicati a livello di file e, quindi questo permetterebbe di disabilitare gli avvertimenti per solo i file in cui includere le intestazioni Qt, ma che ancora significa che non potete vederli per la vostra proprio codice in quei file.

Quindi rimango con la risposta sopra; non è abbastanza carino, ma sono abbastanza sicuro che sia l'unico modo: usare #pragma all'inizio e alla fine delle intestazioni Qt. O cambiare le intestazioni Qt (anche più brutto), o scegliere un modo meno invasivo come questo:

//your source/header file 
#include "shutuppqt.h" 
#include <QString> 
#include "enableallwarnings.h" 

esempio "shutuppqt.h"

#ifdef MSVC 
    #pragma warning (disable : 4222) //or whatever warning Qt emits 
#else 
    //.... 
#endif 

esempio "enableallwarnings.h"

#ifdef MSVC 
    #pragma warning (enable : 4222) //or default instead of enable 
#else 
    //.... 
#endif 
+0

parte 1: Ciao, grazie per la tua risposta! Ho appena modificato la domanda per chiarire cosa intendevo. È possibile utilizzare #pragma per spingere/rilasciare il livello di avviso a 0 solo quando si includono le intestazioni problematiche, ma non è quello che sto cercando. In questo modo riceverai avvisi per il resto del file. Una soluzione perfetta, tranne per il fatto che voglio farlo senza alterare alcun codice. (Non riesco davvero a capire che non è una cosa comune da volere.) Tutto quello che voglio fare è creare un codice portatile e testarlo in ambienti diversi senza mettere in una logica di preprocessore separata per ogni compilatore là fuori. – Mathias

+1

parte 2: Guarda qui -isistema: http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Preprocessor-Options.html#Preprocessor-Options Utilizzando tale opzione disabiliti in modo efficace tutti avvisi da qualsiasi file in * dir *. È così che dici al compilatore qual è il tuo codice, o più importante; cos'è * non * il tuo codice. – Mathias

+1

non esiste una tale opzione per cl, o almeno non documentata ... "In realtà non capisco che questa non è una cosa comune da volere" -> bene non riesco a capire che un grande progetto come Qt non lo fa abbi cura di liberarti delle tonnellate di avvertimenti che produce. – stijn

Problemi correlati