2015-08-17 18 views
7

Sto cercando un modo per sopprimere tutti i possibili avvertimenti che posso ottenere con Gcc con le direttive pragma. Avevo creato dei macro di guardia che mi aiutavano a silenziare gli header di terze parti dagli avvertimenti, e per ora funzionano come incantesimi per msvc e clang. Mi manca ancora il modo corretto di utilizzare le indicazioni di diagnostica di Gcc per sopprimere ogni avviso in una sezione. Permettetemi di darvi alcuni esempi:Come disabilitare tutti gli avvisi usando le direttive pragma in GCC

In msvc possiamo fare questo:

#pragma warning(push, 0) 
// Code that produces warnings... 
#pragma warning(pop) 

E in clang possiamo farlo:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wall" 
#pragma clang diagnostic ignored "-Wextra" 
// Code that produces warnings... 
#pragma clang diagnostic pop 

E il codice che si trova nel mezzo è ora essere messi a tacere dagli avvertimenti per sempre.

E in Gcc abbiamo anche direttive pragma simili con clangore e pensavo di poter provare qualcosa di simile:

#pragma GCC diagnostic push 
#pramga GCC diagnostic ignored "-Wall" 
#pragma GCC diagnostic ignored "-Wextra" 
// Code that produces warnings... 
#pramga GCC diagnostic pop 

Ma passando -Wall e -Wextra in pragma ignorato diagnostico in GCC non funziona come clang e non disabilita tutti i possibili avvertimenti. Al posto di questo passaggio un'avvertenza specifica per disabilitare opere:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-parameter" 
void foo (int x) // No longer getting "unused parameter 'x'" warning 
{ 
} 
#pragma GCC diagnostic pop 

Quindi l'unica soluzione che posso pensare finora è quello di fare un lungo elenco con tutti i segnali di avvertimento del CCG e usarli come sopra. C'è una soluzione più elegante? In caso contrario, posso ottenere l'elenco completo dei flag di avviso Gcc (preferibilmente in un elenco semplice)?

+0

Perché perché perché perché perché perché perché si desidera disattivare gli avvisi ?? :(:( –

+6

Poiché il mio codice è privo di avvisi e le intestazioni di terze parti come ho detto a volte contengono avvertimenti. – Fr0stBit

+0

Le intestazioni di "Sistema" non dovrebbero avere la loro perdita di diagnostica, proprio per questo motivo. manualmente con '-I', invece usa' -isystem', risolvendo i problemi :) Quindi puoi riattivare i tuoi avvisi (più '-Werror'!) per catturare i bug che introduci nel tuo codice in futuro. avvertimento libero ora, ma l'intero scopo degli avvertimenti è quello di catturare quando si rompe in futuro ... –

risposta

1

Documentation dice:

Al momento solo gli avvertimenti (normalmente controllati da ‘-W ...’) possono essere controllati, e non tutti. Utilizzare -fdiagnostics-show-option per determinare quali programmi diagnostici sono controllabili e quale opzione li controlla.

+0

Come uso questo flag? Posso passarlo a gcc in qualche modo per ottenere un elenco delle opzioni? – Fr0stBit

+0

Sì, costruisci il tuo file con questa opzione, e a dds qualcosa come '[-Wunused-variable]' ad ogni avviso. – Heavy

+0

Ma non è ancora utile, poiché il mio scopo è quello di trovare un modo per sopprimere tutti gli avvertimenti con qualche direttiva intelligente, o di raccogliere un elenco con tutti gli avvisi controllati. – Fr0stBit