2013-08-06 23 views
7

Ho appena letto un libro che consiglia di abilitare il livello di avviso più alto in GCC. Ho appena controllato il documento online e ho scoperto che ci sono troppi parametri. Voglio abilitare il livello di avviso più alto, quale parametro dovrei usare?Come abilitare il livello di avviso più alto nel compilatore GCC (Boost è molto utilizzato)

E noi utilizziamo pesantemente Boost nel nostro progetto.

+5

'-Wall -Wextra -pedantic-errors' è un buon inizio, se non tutto ciò che serve. – chris

+0

solo per chi usa clang su apple ha '-Weverything' – aaronman

+0

@chris Tuttavia, con le nuove versioni di GCC (4.8.1 per me), non puoi mai usare Boost con quella combinazione di flag, a meno che non sopprimi specificamente gli avvisi generati da Aumenta il codice. '-Wunused-local-typedefs' anyone? –

risposta

10

Contrariamente a cl, che ha 4 livelli, gcc ha solo una serie di opzioni che è possibile attivare o disattivare.

Come menzionato da altri, lo -Wall è l'impostazione predefinita, che attiva già molti avvisi. L'opzione -pedantic ne aggiunge altri. E -Wextra ancora un altro gruppo ...

Ma per catturare davvero molti avvisi, dovrai aggiungere molti manualmente.

V'è una serie che mi piace usare, anche se qualcuno mi ha detto che alcuni di questi erano contraddittorie, trovo che la lista piuttosto buono per il mio lavoro di sviluppo:

-Werror -Wall -Wextra -pedantic -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wundef -Wno-unused -Wno-variadic-macros -Wno-parentheses -fdiagnostics-show-option

Nota che faccio uso di -Werror perché altrimenti si ricevono avvisi e tendono ad ignorarli. Con -Werror, basta ignorare qualsiasi cosa! Scrivi codice pristine e il tuo software ha molte più probabilità di funzionare come previsto.

+0

hai considerato l'uso di Boost? Ciò porterà qualche problema? Non ne dubito, semplicemente non lo so. Grazie – Yang

+0

Con boost potrebbe essere necessario rimuovere alcune delle opzioni per non doverle spegnere nel codice. Una cosa su cui un'azienda sta lavorando è creare un set di wrapper per i file che creano problemi. In essi è quindi possibile utilizzare un #pragma per disattivare gli avvisi che altrimenti verrebbero generati. Ad esempio: '#pragma GCC diagnostic ignored" -Wold-style-cast "' sarebbe di aiuto se si utilizza una macro che utilizza un cast di tipo C. –

+2

'-Wconversion' è un altro che potresti prendere in considerazione – JDiMatteo

-1

Credo che si può utilizzare l'interruttore -Wall