2013-04-14 8 views
7

Ho imparato che posso mettereGCC, C: Scoprire nome di avvertimenti di default per l'uso in #pragma ignorare

#pragma GCC diagnostic ignored "<warning>" 

alla parte superiore di un file sorgente al fine di eliminare gli avvisi relativi a questo particolare file sorgente. Tuttavia, sembra che alcuni nomi non siano abbastanza specifici. Ad esempio,

#pragma GCC diagnostic ignored "-Wwrite-strings" 

non impedisce gcc (4.7.2) la visualizzazione di messaggi di avviso i cui nomi esatto non sono dati, invece, questi messaggi sono seguiti solo da [abilitato per impostazione predefinita]. Suppongo di dover conoscere i nomi di avvertenza corretti in modo da poterli utilizzare nella riga #pragma. Ho provato

-fdiagnostics-show-option, 

ma gli avvisi vengono visualizzati come [abilitato per impostazione predefinita].

C'è un modo per identificare questi avvisi o in alternativa sopprimere gli avvisi relativi a un file sorgente specifico?

Grazie mille!

+0

credo che l'opzione corretta da usare è '-Wno-scrittura-strings' – Bechir

+0

Se non mi sbaglio, questo è un opzione del compilatore che disabilita tutte le avvertenze corrispondenti a livello globale. Quello che volevo fare è disabilitare solo gli avvisi causati da determinati file sorgente. Ecco perché ho provato l'approccio '# pragma'. Ma grazie comunque! – Guybrush

risposta

2

È necessario premere e inserire gli stati di diagnostica. Come questo:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-function" 
    /* ignoring warning */ 

    int unused_function(void) { 
     return 1337; 
    } 
#pragma GCC diagnostic pop 
+0

Così ho messo tutte le funzioni del mio file sorgente tra i pragmi come mostrato da voi, con '-Wwrite-stringhe'. Tuttavia, non sopprime gli avvisi provenienti da questo file che sono etichettati come "abilitati di default". – Guybrush

+0

Puoi condividere più informazioni su come è la tua riga di comando gcc (ad esempio -Wall, -pedantic, eccetera)? Quali sono esattamente gli avvertimenti che stai ricevendo? –

+0

Ho usato '-pedantic -Wall -Wshadow -Wpointer-arith -Wwrite-stringhe'. Se non faccio nulla, ottengo avvertimenti etichettati con '-Wshadow',' -Wunused-variable', '-Wimplicit-function-declaration' e' enabled di default'. Mettendo '#pragma GCC diagnostic igonred" "' all'inizio dei file sorgente rilevanti, posso sbarazzarmi dei primi tre tipi di avviso, ma non so come comportarmi con 'enabled di default' avvisi provenienti da quei file di origine. – Guybrush