Tu ne peux pas.
Le manuel de GCC 4.4.0 n'est complet que pour cette version, mais il répertorie tous les avertissements possibles pour 4.4.0. Cependant, ils ne sont pas tous sur la page vers laquelle vous liez, par exemple, certaines options spécifiques au langage sont sur les pages pour les options C ++ ou les options Obj-C. Pour les trouver tous, il vaut mieux regarder le résumé des options
Activer tout inclurait -Wdouble-promotion
ce qui n'est pertinent que sur les processeurs avec une unité à virgule flottante simple précision 32 bits qui implémente float
dans le matériel, mais émule double
dans le logiciel. Faire des calculs comme double
utiliserait l'émulation logicielle et serait plus lent. Cela est pertinent pour certains processeurs intégrés, mais complètement non pertinent pour les processeurs de bureau modernes avec prise en charge matérielle pour les virgules flottantes 64 bits.
Un autre avertissement qui n'est généralement pas utile est celui -Wtraditional
qui met en garde contre un code parfaitement bien formé qui a une signification différente (ou qui ne fonctionne pas) dans les "string " "concatenation"
définitions de fonctions C traditionnelles, par exemple , ou ISO C! Vous souciez-vous vraiment de la compatibilité avec les compilateurs de 30 ans? Voulez-vous vraiment un avertissement pour écrire int inc(int i) { return i+1; }
?
Je pense que -Weffc++
c'est trop bruyant pour être utile, il est basé sur la première édition obsolète d' Efficace C ++ et met en garde contre les constructions qui sont parfaitement valides C ++ (et pour lesquelles les directives ont changé dans les éditions ultérieures du livre.) Je ne veux pas être a averti que je n'ai pas initialisé de 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()
pour l'appeler? Les -Weffc++
avertissements qui seraient utiles sont trop difficiles à détecter avec précision par le compilateur (donnant de faux négatifs), et ceux qui ne sont pas utiles, tels que l'initialisation explicite de tous les membres, produisent simplement trop de bruit, donnant des faux positifs.
Luc Danton a fourni un excellent exemple d'avertissements inutiles -Waggregate-return
qui n'ont presque certainement aucun sens pour le code C ++.
c'est-à-dire que vous ne voulez pas vraiment tous les avertissements, vous pensez juste que vous le voulez.
Parcourez le manuel, lisez-les, décidez ce que vous voudrez peut-être activer, essayez-les. Lire le manuel de votre compilateur est une bonne chose TM de toute façon, en prenant une coupe courte et permettant des avertissements que vous ne comprenez pas est pas une très bonne idée, surtout si elle est d'éviter d' avoir à RTFM.
Quiconque allume tout est probablement en train de le faire parce qu'il n'a aucune idée parce que ou un patron aux cheveux pointus n'a dit "aucun avertissement".
Certains avertissements sont importants, d'autres non. Vous devez être discriminant ou vous gâcher votre programme. Prenons, par exemple, -Wdouble-promotion
. Si vous travaillez sur un système embarqué, vous voudrez peut-être cela; si vous travaillez sur un système de bureau, vous ne le faites probablement pas. Et tu veux -Wtraditional
? J'en doute.
Modifier: Voir aussi -Wall-all pour activer tous les avertissements qui est fermé comme WONTFIX.
Edit 2: en réponse à la plainte de DevSolar sur les makefiles devant utiliser différents avertissements selon la version du compilateur, si cela -Wall -Wextra
ne convient pas, il n'est pas difficile d'utiliser les CFLAGS spécifiques au compilateur et à la version:
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))