web-dev-qa-db-fra.com

Que fait "-Wall" dans "g ++ -Wall test.cpp -o test"?

-o change le nom du fichier de sortie (j'ai trouvé qu'en utilisant --help)

Mais je ne peux pas savoir ce que -Wall Est-ce que?

75
steven

C'est l'abréviation de "tout avertir" - il active (presque) tous les avertissements dont g ++ peut vous parler. Généralement, c'est une bonne idée, surtout si vous êtes débutant, car la compréhension et la correction de ces avertissements peuvent vous aider à résoudre de nombreux types de problèmes dans votre code.

95
MatrixFrog

Voir man gcc.

- Mur active ces avertissements:

-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
 Objective-C only) -Wimplicit-function-declaration (C and Objective-C only) 
-Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) 
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type 
-Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing 
-Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas 
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable 
-Wvolatile-register-var

- Wextra contient:

-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
 or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)

Il existe de nombreux autres avertissements que vous devez activer explicitement.

Par exemple. pour notre code C, nous utilisons:

-Mur -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimisation -Wdiv-by-zero -Wendif-labels -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = missing-braces -Wmissing-declarations -Wno-missing-format-attribute -Wmissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-used -Wvariadic-macros -Wwrite-strings -Wc ++ -compat -Werror = déclaration-après-instruction -Werror = déclaration-de-fonction-implicite -Wotyping-prototypes -Werror = nested-externs -Werror = old-style-definition -Werror = strict-prototypes

ou tout simplement l'ensemble des avertissements avec https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html

28
rurban

Malheureusement, aucune des réponses ne cite la partie réellement pertinente du manuel, ce qui l'amène vraiment à un point:

Cela active tous les avertissements sur les constructions que certains utilisateurs considèrent douteux et qui sont faciles à éviter (ou à modifier pour éviter l'avertissement), même en conjonction avec des macros.

[...]

Notez que certains indicateurs d'avertissement ne sont pas impliqués par -Wall. Certains d'entre eux mettent en garde contre les constructions que les utilisateurs ne considèrent généralement pas comme douteuses, mais que vous souhaiterez parfois vérifier; d'autres mettent en garde contre les constructions qui sont nécessaires ou difficiles à éviter dans certains cas, et il n'existe aucun moyen simple de modifier le code pour supprimer l'avertissement. Certains d'entre eux sont activés par -Wextra mais beaucoup d'entre eux doivent être activés individuellement.

Ergo:

  • -Wall ne pas signifie "tous les avertissements".
  • Cela signifie également pas signifie "(presque) tout", et non pas de loin.
  • Cela signifie un ensemble d'options individuelles qui est appelé à changer .

En bout de ligne, il s'agit du minimum absolu d'avertissements que vous devez définir. Tandis que -Wall -Wextra c'est mieux, il n'utilise toujours pas toutes les erreurs de vérification que votre compilateur peut faire pour vous.


Personnellement, je n'irais pas pour moins de -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. Tous mes projets actuels utilisent en fait une liste d'avertissements plus longue que cela (sans déclencher aucun d'entre eux). Et je vérifie le manuel sur chaque version majeure pour de nouvelles options. Le compilateur est votre ami. Utilisez tous les diagnostics qu'il peut vous offrir.

17
DevSolar

Il permet des avertissements jugés utiles et faciles à éviter à la source par les rédacteurs gcc. Il existe également -W (-Wextra dans les versions plus récentes) qui sont jugées utiles mais pour lesquelles contourner les faux positifs peut être difficile ou entraîner un code maladroit.

gcc a également un tas d'autres avertissements, généralement moins utiles. Voir http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options

6
AProgrammer

Il enables most warning messages.

Vous pouvez en savoir plus si vous utilisez g++ --help=warnings.

1
Yuval

Il active tous les avertissements. (se lit comme "Avertissement à tous")

0
Bjorn J