Autre que -Wall, quels autres avertissements les gens ont-ils trouvés utiles?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
J'utilise régulièrement:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
Cet ensemble attrape beaucoup pour les personnes qui n'y sont pas habituées (les personnes dont je peux compiler le code avec ces drapeaux pour la première fois); cela me pose rarement un problème (bien que -Wcast-qual soit parfois une nuisance).
Depuis le 01/09/2011, avec la version 4.6.1 de gcc
Mon alias "développement" actuel
gcc -std = c89 -pedantic -Wall\ -Wno-missing-braces -Wextra -Wno-missing-field-initializers -Wformat = 2\ -Wswitch-default -Wswitch-enum -Wcast-align -Wpointer-arith\ -Wbad-function-cast -Wstrict-overflow = 5 -Wstrict-prototypes -Winline\ -Wundef -Wnested-externs -Wcast -qual -Wshadow -Wunreachable-code\ -Wlogical-op -Wfloat-equal -Wstrict-aliasing = 2 -Wredundant-decls\ -Wold-style-definition -Werror\ -ggdb3\ -O0\ -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing\ -lm
L'alias "release"
gcc -std = c89 -pedantic -O3 -DNDEBUG -flto -lm
En date du 2009-11-03
alias "développement"
gcc -Wall -Wextra -Wformat = 2 -Wswitch-default -Wcast-align -Wpointer-arith\ -Wbad-function-cast -Wstrict-prototypes -Winline -Wundef -Wnested-externs\ -Wcast-qual -Wshadow -Wwrite-strings -Wconversion -Wunreachable-code\ -Wstrict-aliasing = 2 -ffloat-store -fno-common -fstrict-aliasing\ -lm -std = c89 -pedantic -O0 -ggdb3 -pg --coverage
alias "release"
gcc -lm -std = c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
J'aime -Werror. Conserve l'avertissement de code gratuit.
J'ai commencé avec C++, donc quand je suis passé à l'apprentissage du C, je me suis assuré d'être extra-anal:
- fmessage-length = 0 - ansi -pedantic -std = c99 - Werror - Mur - Wextra -Wwrite-strings - Winit-self - Wcast-align - Wcast-qual - Wpointer-arith - Wstrict-aliasing - Wformat = 2 - Wmissing-declarations - Wmissing-include-dirs - Wno-non utilisé-paramètre - Wuninitialized -Wold-style-definition - Wstrict-prototypes - Wmissing-prototypes
Obtenez le manuel de la version de GCC que vous utilisez, trouvez toutes les options d'avertissement disponibles, puis désactivez niquement celles pour lesquelles vous avez un convaincant raison de le faire. (Par exemple, des en-têtes tiers non modifiables qui vous donneraient beaucoup d'avertissements autrement.) Documentez ces raisons. (Dans le Makefile ou partout où vous définissez ces options.) Vérifiez les paramètres à intervalles réguliers, et chaque fois que vous mettez à niveau votre compilateur.
Le compilateur est votre ami. Les avertissements sont votre ami. Donnez au compilateur autant de chances que possible de vous informer des problèmes potentiels.
J'utilise également:
-Wstrict-overflow = 5
Pour attraper ces bugs désagréables qui peuvent se produire si j'écris du code qui s'appuie sur le comportement de débordement des entiers.
Et:
-Wextra
Ce qui permet également à certaines options agréables d'avoir. La plupart sont cependant pour C++.
-pedantic -Wall -Wextra -Wno-write-strings -Wno-non utilisé-paramètre
Pour le mode "Faites-moi mal", je laisse de côté le -Wno ...
J'aime avoir mon avertissement de code gratuit, surtout avec C++. Alors que les avertissements du compilateur C peuvent souvent être ignorés, de nombreux avertissements C++ montrent des défauts fondamentaux dans le code source.
Je compile généralement avec "-W -Wall -ansi -pedantic" cela aide à assurer une qualité et une portabilité maximales du code.
-pedantic-errors
-Wfloat-égal, -Wshadow, -Wmissing-prototypes,
-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Wno-non utilisé-value -Wreturn-type
En ce moment j'utilise:
-Mur -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
J'ai pris cette liste principalement dans le livre "Une introduction à gcc", puis certaines de lrich Drepper recommandation sur la programmation défensive ( http://people.redhat.com/drepper/Defensive- slides.pdf ).
Mais je n'ai aucune science derrière ma liste, c'était juste une bonne liste.
/ Johan
Remarque: je n'aime pas ces drapeaux pédants cependant ...
Remarque: Je pense que -W et -Wextra sont plus ou moins la même chose.
J'utilise généralement juste
gcc -Wall -W -Wunused-parameter -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wconversion -Wshadow -Wcast-align -Wparentheses -Wsequence-point -Wdeclaration-after-statement -Wundef -Wpointer-arith -Wnested-externs -Wredundant-decls -Werror -Wdisabled-optimization -pedantic -funit-at-a-time -o
L'avertissement concernant les variables non initialisées ne fonctionne que si vous spécifiez -O
, donc j'inclus cela dans ma liste:
-g -O -Wall -Werror -Wextra -pedantic -std=c99
-Wfatal-errors