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)?
Perché perché perché perché perché perché perché si desidera disattivare gli avvisi ?? :(:( –
Poiché il mio codice è privo di avvisi e le intestazioni di terze parti come ho detto a volte contengono avvertimenti. – Fr0stBit
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 ... –