ejecutar - gcc linux
Opciones recomendadas de advertencia de gcc para C (15)
-Wfloat-equal, -Wshadow, -Wmissing-prototypes,
Aparte de -Wall ¿qué otras advertencias han encontrado útiles las personas?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
-Wredundant-decls -Wansted-externs -Wstrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Wno-unused-value -Wreturn-type
-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter
Para el modo "Dame mucho", dejo el -Wno ...
Me gusta tener mi código de advertencia gratuita, especialmente con C ++. Mientras que las advertencias del compilador de C a menudo se pueden ignorar, muchas advertencias de C ++ muestran defectos fundamentales en el código fuente.
-pedantic-errors
A partir de 2011-09-01, con la versión 4.6.1 de gcc
Mi alias actual de "desarrollo"
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
El alias de "liberación"
gcc -std=c89 -pedantic -O3 -DNDEBUG -flto -lm
A partir de 2009-11-03
alias de "desarrollo"
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 de "liberación"
gcc -lm -std=c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
Comencé con C ++, así que cuando hice el cambio para aprender, CI se aseguró de ser extra-anal:
-fmessage-length=0 -ansi -pedantic -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Winit-self -Wcast-align -Wcast-qual -Wpointer-arith -Wstrict-aliasing -Wformat=2 -Wmissing-declarations -Wmissing-include-dirs -Wno-unused-parameter -Wuninitialized -Wold-style-definition -Wstrict-prototypes -Wmissing-prototypes
En este momento yo uso:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
Tomé esa lista en su mayoría del libro "Una introducción a gcc" y luego de la recomendación de Ulrich Drepper sobre Programación Defensiva ( http://people.redhat.com/drepper/Defensive-slides.pdf ).
Pero no tengo ninguna ciencia detrás de mi lista, simplemente se sentía como una buena lista.
/ Johan
Nota: Aunque no me gustan esas banderas pedantes ...
Nota: Creo que -W y -Wextra son más o menos lo mismo.
En general solo uso
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
La advertencia sobre variables no inicializadas no funciona a menos que especifique -O
, así que incluyo eso en mi lista:
-g -O -Wall -Werror -Wextra -pedantic -std=c99
Me gusta -Werror. Mantiene el código de advertencia libre.
Normalmente compilo con "-W -Wall -ansi -pedantic", esto ayuda a garantizar la máxima calidad y portabilidad del código.
Obtenga el manual de la versión de GCC que utiliza, encuentre todas las opciones de advertencia disponibles y luego desactive solo aquellos para los que tenga una razón convincente para hacerlo. (Por ejemplo, encabezados de terceros no modificables que le darían muchas advertencias de lo contrario). Documente esos motivos. (En el archivo Makefile o donde establezca esas opciones). Revise la configuración en intervalos regulares y cada vez que actualice su compilador.
El compilador es tu amigo Las advertencias son tu amigo Bríndele al compilador la posibilidad de contarle posibles problemas.
Yo también uso:
-Wstrict-overflow = 5
Para detectar los errores desagradables que pueden ocurrir si escribo código que se basa en el comportamiento de desbordamiento de enteros.
Y:
-Wextra
Lo que permite algunas opciones que también son agradables tener. La mayoría son para C ++ sin embargo.
Yo uso de forma rutinaria:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual /
-Wstrict-prototypes -Wmissing-prototypes
Este conjunto atrapa mucho a las personas que no están acostumbradas (personas cuyo código compilo con esas banderas por primera vez); rara vez me da un problema (aunque -Wcast-qual ocasionalmente es una molestia).
-Wfatal-errors