-o change le nom du fichier de sortie (j'ai trouvé cela en utilisant --help)
Mais je ne peux pas savoir ce que -Wall
fait?
-o change le nom du fichier de sortie (j'ai trouvé cela en utilisant --help)
Mais je ne peux pas savoir ce que -Wall
fait?
man
entrées des programmes si vous voulez savoir ce que fait un commutateur ou quels commutateurs sont disponibles. La man
page de gcc
peut être lue sur linux.die.net/man/1/gcc - vous pouvez y faire une recherche rapide pour le texte "-Wall"
Réponses:
C'est l'abréviation de "warn all" - il active (presque) tous les avertissements dont g ++ peut vous informer. C'est généralement une bonne idée, surtout si vous êtes débutant, car comprendre et corriger ces avertissements peut vous aider à résoudre de nombreux types de problèmes dans votre code.
-Wextra
et -pedantic
.
-Wall -Wextra
, puis parcourir le manuel pour trouver autant d' autres avertissements que vous pouvez activer possible, car même -Wextra
est seulement un petit sous - ensemble ...
-Wunreachable-code
quelque temps, Apple serait beaucoup plus heureux ces jours-ci. ;-)
Voir man gcc.
-Wall 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:
-Wall -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 = accolades-manquantes -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-inutilisé -Wvariadic-macros -Wwrite-strings -Wc ++ -compat -Werror = déclaration-après-instruction -Werror = déclaration-de-fonction-implicite -Wmissing-prototypes -Werror = imbriquées-externs -Werror = ancienne-définition -Werror = strict-prototypes
ou simplement l'ensemble des avertissements avec https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
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 comme douteuses, et qui sont faciles à éviter (ou à modifier pour empêcher 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 des constructions que les utilisateurs ne considèrent généralement pas comme discutables, mais que vous voudrez peut-être parfois vérifier; d'autres avertissent des constructions qui sont nécessaires ou difficiles à éviter dans certains cas, et il n'y a pas de 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 signifie pas «tous les avertissements».En bout de ligne, il s'agit du minimum absolu d'avertissements que vous devez définir. Bien que ce -Wall -Wextra
soit 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.
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
pendant que je compile avec g++ -std=c++11
pendant que j'apprends le C ++ et la programmation? Ou devrais-je ignorer cette partie et commencer à utiliser les indicateurs de messages d'erreur plus tard? Si oui, quand dois-je commencer avec les messages d'erreur?
Il permet des avertissements jugés utiles et faciles à éviter à la source par les rédacteurs de 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
Il active tous les avertissements. (se lit comme "Avertissement à tous")
-Wall
signifie simplement "la plupart des avertissements" au lieu de "tous les avertissements".
Il affiche tous les avertissements. Je recommanderais également d'utiliser -pedantic
pour avertir de certaines parties de code non conformes.