Vous ne pouvez pas.
Le manuel de GCC 4.4.0 est complète pour cette version, mais il fait une liste de tous les avertissements possibles pour 4.4.0. Ils ne sont pas tous sur la page que vous liez à bien, par exemple, de certaines langues d'options spécifiques sur les pages de C++ options ou Obj-C options. Pour les trouver tous, vous êtes mieux de regarder le Résumé des Options
Tournant sur tout ce qui inclurait -Wdouble-promotion
qui est applicable uniquement sur les Processeurs avec un 32-bit single-precision floating-point unit) qui implémente float
dans le matériel, mais émule double
dans le logiciel. Faire des calculs comme double
serait d'utiliser le logiciel d'émulation et d'être plus lente. C'est pour certains Processeurs embarqués, mais complètement hors de propos pour les Processeurs de bureau moderne avec du matériel de soutien pour la version 64 bits à virgule flottante.
Un avertissement qui n'est généralement pas utile, -Wtraditional
, qui met en garde à propos de parfaitement bien formé code qui a un sens différent (ou ne fonctionne pas) dans la traditionnelle C, par exemple, "string " "concatenation"
, ou ISO C des définitions de fonction! Ne vous vous souciez vraiment de la compatibilité avec les 30 ans des compilateurs? Voulez-vous vraiment un avertissement pour la rédaction int inc(int i) { return i+1; }
?
Je pense que -Weffc++
est trop bruyant pour être utile, il est basé sur l'ancienne première édition de Effective C++ et met en garde sur les constructions qui sont parfaitement valide en C++ (et pour lesquelles les lignes directrices changé dans les éditions ultérieures de l'ouvrage.) Je ne veux pas être prévenu que je n'ai pas initialisé une std::string
membre dans mon constructeur; il a un constructeur par défaut qui fait exactement ce que je veux, pourquoi devrais-je écrire m_str()
? L' -Weffc++
avertissements qui pourraient être utiles sont trop difficiles pour le compilateur de détecter avec précision (en donnant de faux négatifs), et ceux qui ne sont pas utiles, telles que l'initialisation de tous les membres explicitement, seulement de produire trop de bruit, de donner de faux positifs.
c'est à dire que vous n'avez pas vraiment envie de tous les avertissements, vous pensez juste que vous faites.
Passer par le manuel, lire à leur sujet, de décider laquelle vous souhaiterez peut-être activer, de les essayer. La lecture de votre compilateur manuel est une Bonne ChoseTM de toute façon, en prenant une coupe courte et permettant des mises en garde que vous ne comprenez pas n'est pas une très bonne idée, surtout si c'est pour éviter d'avoir à RTFM.
Quelqu'un qui tourne sur tout ce qui est sans doute le faire parce qu'ils sont désemparés car ou d'un pointu à poil patron a dit "pas de mises en garde."
Certains avertissements sont importants, et certains ne le sont pas. Vous devez être discriminatoires ou vous gâcher votre programme. Considérons, par exemple, -Wdouble-promotion
. Si vous travaillez sur un système embarqué, vous voudrez; si vous travaillez sur un système de bureau vous n'avez probablement pas. Et voulez-vous -Wtraditional
? J'en doute.
Edit: Voir aussi -Mur, afin de permettre à tous les avertissements qui est fermé comme WONTFIX.
Edit 2: en réponse à DevSolar de la plainte sur les makefiles avoir besoin d'utiliser différents avertissements selon version de compilateur, si -Wall -Wextra
n'est pas approprié, il n'est pas difficile à utiliser compilateur spécifique et spécifique à la version CFLAGS:
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))