web-dev-qa-db-fra.com

Options d'avertissement gcc recommandées pour C

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

78
Sard

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).

45
Jonathan Leffler

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 
36
pmg

J'aime -Werror. Conserve l'avertissement de code gratuit.

15
JesperE

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 
15
Tom

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.

9
DevSolar

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++.

5
Nils Pipenbrinck

-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.

2
Thorsten79

Je compile généralement avec "-W -Wall -ansi -pedantic" cela aide à assurer une qualité et une portabilité maximales du code.

2
Evan Teran

-pedantic-errors

1
Tom Ritter

-Wfloat-égal, -Wshadow, -Wmissing-prototypes,

1
Mark Bessey

-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Wno-non utilisé-value -Wreturn-type

1
florin

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.

1
Johan

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
1
amaterasu

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
1
Josh Lee

-Wfatal-errors

0
Adrian Panasiuk