Non puoi.
Il manuale di GCC 4.4.0 è completo solo per quella versione, ma elenca tutti i possibili avvisi per 4.4.0. Non sono tutti nella pagina a cui ti colleghi, ad esempio alcune opzioni specifiche della lingua sono nelle pagine per le opzioni C ++ o Obj-C. Per trovarli tutto è meglio guardare il Riepilogo opzioni
L'accensione di tutto includerebbe ciò-Wdouble-promotion
che è rilevante solo per le CPU con un'unità a virgola mobile a precisione singola a 32 bit che implementa float
nell'hardware, ma emula double
nel software. Fare calcoli come double
userebbe l'emulazione del software ed essere più lento. Questo è rilevante per alcune CPU integrate, ma completamente irrilevante per le moderne CPU desktop con supporto hardware per virgola mobile a 64 bit.
Un altro avvertimento che di solito non è utile è -Wtraditional
che mette in guardia su un codice perfettamente ben formato che ha un significato diverso (o non funziona) nelle "string " "concatenation"
definizioni di funzioni C, ad esempio o ISO C tradizionali ! Ti interessa davvero la compatibilità con i compilatori di 30 anni? Vuoi davvero un avvertimento per la scrittura int inc(int i) { return i+1; }
?
Penso che -Weffc++
sia troppo rumoroso per essere utile, si basa sulla prima edizione obsoleta di Effective C ++ e mette in guardia su costrutti che sono perfettamente validi C ++ (e per i quali le linee guida sono cambiate nelle successive edizioni del libro.) Non voglio essere avvertito che non avevo inizializzato un std::string
membro nel mio costruttore; ha un costruttore predefinito che fa esattamente quello che voglio, perché dovrei scrivere m_str()
per chiamarlo? Gli -Weffc++
avvertimenti che potrebbero essere utili sono troppo difficili da rilevare con precisione dal compilatore (dando falsi negativi), e quelli che non sono utili, come l'inizializzazione esplicita di tutti i membri, producono solo troppo rumore, dando falsi positivi.
Luc Danton ha fornito un ottimo esempio di avvertimenti inutili -Waggregate-return
che non hanno quasi mai senso per il codice C ++.
cioè non vuoi davvero tutti gli avvertimenti, pensi solo di farlo.
Consulta il manuale, leggi su di essi, decidi quale potresti voler abilitare, provali. Leggere comunque il manuale del compilatore è una buona cosa TM , prendere una scorciatoia e abilitare avvertimenti che non capisci non è una buona idea, soprattutto se si vuole evitare RTFM.
Chiunque accenda tutto, probabilmente lo sta facendo o perché è all'oscuro perché o un capo dai capelli a punta ha detto "nessun avvertimento".
Alcuni avvertimenti sono importanti, altri no. Devi discriminare o rovinare il tuo programma. Si consideri, ad esempio, -Wdouble-promotion
. Se stai lavorando su un sistema incorporato, potresti volerlo; se stai lavorando su un sistema desktop probabilmente non lo fai. E tu vuoi -Wtraditional
? Ne dubito.
Modifica: vedere anche -Wall-all per abilitare tutti gli avvisi chiusi come WONTFIX.
Modifica 2: in risposta al reclamo di DevSolar sui makefile che necessitano di usare avvisi diversi a seconda della versione del compilatore, se -Wall -Wextra
non è adatto, non è difficile usare CFLAG specifici del compilatore e specifici della versione:
compiler_name := $(notdir $(CC))
ifeq ($(compiler_name),gcc)
compiler_version := $(basename $(shell $(CC) -dumpversion))
endif
ifeq ($(compile_name),clang)
compiler_version := $(shell $(CC) --version | awk 'NR==1{print $$3}')
endif
# ...
wflags.gcc.base := -Wall -Wextra
wflags.gcc.4.7 := -Wzero-as-null-pointer-constant
wflags.gcc.4.8 := $(wflags.gcc.4.7)
wflags.clang.base := -Wall -Wextra
wflags.clang.3.2 := -Weverything
CFLAGS += $(wflags.$(compiler_name).base) $(wflags.$(compiler_name).$(compiler_version))