Aparte de -Wall, ¿qué otras advertencias han encontrado útiles las personas?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
c
gcc
compiler-errors
Sard
fuente
fuente
-Wdeclaration-after-statement
' para detectar el código que MSVC (que sigue siendo básicamente un compilador C89) no puede manejar. Es una molestia. Agregar '-Wextra
' también puede detectar otros problemas.-O3
o algo similar; hay advertencias que solo se generan cuando el código está optimizado.-m32
y-m64
(en ejecuciones separadas, por supuesto) proporciona una mejor protección contra varios errores en la forma de usoprintf()
yscaf()
las especificaciones de conversión.Desde 2011-09-01, con gcc versión 4.6.1
Mi alias actual de "desarrollo"
El alias de "liberación"
Desde 2009-11-03
alias de "desarrollo"
alias de "liberación"
fuente
-Wfloat-equal
agregado a mi alias. Gracias Mark-Wstrict-aliasing=2
realidad reduce el nivel de advertencia de-Wstrict-aliasing=3
implícito-Wall
, al menos con una versión reciente de gcc.Me gusta -Werror. Mantiene libre la advertencia del código.
fuente
#warning
un buen efecto secundario del uso-Werror
.-Werror
de forma predeterminada en sus compilaciones, molesta a los empaquetadores que están usando diferentes versiones del compilador, ya que las advertencias cambian con la versión del compilador, a veces el código que advierte gratis para usted tendrá una advertencia para otra persona y luego tienen que profundizar en su sistema de compilación para apagarlo.Empecé con C ++, así que cuando hice el cambio para aprender CI me aseguré de ser extra-anal:
fuente
Obtenga el manual para la versión de GCC que usa, busque todas las opciones de advertencia disponibles y luego desactive solo aquellas para las 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 Makefile o donde sea que establezca esas opciones). Revise la configuración en intervalos regulares y siempre que actualice su compilador.
El compilador es tu amigo. Las advertencias son tus amigas. Déle al compilador tantas oportunidades como sea posible para informarle de los problemas potenciales.
fuente
Yo también uso:
Para detectar esos errores desagradables que pueden ocurrir si escribo código que se basa en el comportamiento de desbordamiento de los enteros.
Y:
Lo que habilita algunas opciones que también es bueno tener. Sin embargo, la mayoría son para C ++.
fuente
Normalmente compilo con "-W -Wall -ansi -pedantic", esto ayuda a garantizar la máxima calidad y portabilidad del código.
fuente
-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter
Para el modo "Hazme mucho daño", dejo de lado el -Wno ...
Me gusta tener mi código de advertencia gratis, especialmente con C ++. Si bien las advertencias del compilador de C a menudo se pueden ignorar, muchas advertencias de C ++ muestran defectos fundamentales en el código fuente.
fuente
Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}
-> relativamente difícil de detectar. Si está molesto por esa advertencia, simplemente debe comentar el parámetrofoo (int /*q*/)
, esto también aumenta la legibilidad de su código.-Errores-pedantes
fuente
clang
(el compilador C del proyecto LLVM) y luego compila con-Weverything
y verás lo divertido que puede llegar a ser compilar mach (algunas de las advertencias son totalmente locas, pero técnicamente correctas).-Wfloat-equal, -Wshadow, -Wmissing-prototypes,
fuente
-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implícita-declaración-función -Wunused -Wno-valor-no utilizado -Wreturn-type
fuente
Ahora mismo uso:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
Tomé esa lista principalmente 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 sintió 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.
fuente
Generalmente solo uso
fuente
La advertencia sobre variables no inicializadas no funciona a menos que especifique
-O
, así que lo incluyo en mi lista:-g -O -Wall -Werror -Wextra -pedantic -std=c99
fuente
-Wfatal-errors
fuente