2010-03-09 12 views
60

-o cambia el nombre de archivo de salida (lo encontré usando --help)¿Qué significa "-Wall" en "g ++ -Wall test.cpp -o test"?

¿Pero no puedo averiguar qué hace -Wall?

+6

"man gcc" en su consola le dice todo sobre esta bandera y una simple búsqueda en google con "gcc -Wall" también ... –

+0

Como consejo general, intente leer las entradas 'man' para programas si quiere saber qué hace un interruptor, o qué interruptores están disponibles. La página 'man' de' gcc' puede leerse en http://linux.die.net/man/1/gcc - puede hacer una búsqueda rápida allí para ver el texto "-Wall" – gnud

+3

@David Sauter, Google lo hará no encuentra nada con "-wall". Excluirá todo "muro" de la búsqueda. –

Respuesta

77

Es la abreviatura de "advertir a todos": enciende (casi) todas las advertencias de las que puede hablar g ++. Por lo general, es una buena idea, especialmente si es un principiante, porque comprender y corregir esas advertencias puede ayudarlo a solucionar muchos tipos diferentes de problemas en su código.

+19

Más advertencias (algunas de las cuales son bastante útiles) pueden activarse con '-Wextra' y' -pedantic'. – gnud

+5

No es (casi) todo. En realidad, es solo una fracción muy pequeña de las advertencias disponibles. Son los que "todos" están de acuerdo. La * realmente * buena idea es hacer '-Wall -Wextra', y luego leer detenidamente el manual para encontrar tantas * más * advertencias que puedas habilitar como sea posible, porque incluso' -Wextra' es solo un pequeño subconjunto ... – DevSolar

+0

@DevSolar muy buen punto. ¿Sabes si hay una bandera que significa "literalmente * todas * las advertencias"? – MatrixFrog

1

Activa todas las advertencias. (se lee como "Advertencia de todos")

+0

En realidad, hay muchas advertencias que no permite (como dtor no virtual en una clase con métodos virtuales). –

0

Muestra todas las advertencias. También recomendaría utilizar -pedantic para advertir acerca de algunas partes no conformes del código.

+0

Para gcc doc: "Algunos usuarios intentan usar -pedantic para verificar la estricta conformidad con ISO C. Pronto descubren que no hace lo que quieren: encuentra algunas prácticas que no son ISO, pero no todas, solo las de qué ISO C requiere un diagnóstico, y algunos otros para los que se han agregado diagnósticos ". – AProgrammer

+0

No da 100% de garantía, pero ayuda. –

+1

Si no hubiera escrito * algún * en lugar de * todo * en "para advertir sobre * todas * partes no conformes", no lo habría comentado. Pero su formulación actual acaba de difundir la idea errónea de que la documentación de gcc advierte. – AProgrammer

6

habilita las advertencias que se consideran útiles y fáciles de evitar en la fuente por los escritores de gcc. También hay -W (-Wextra en lanzamientos más nuevos) que se consideran útiles pero para los que los falsos positivos pueden ser difíciles o dar como resultado un código torpe.

gcc también tiene un montón de otras advertencias, generalmente menos útiles. Ver http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options

22

Ver hombre gcc.

-Wall enciende estas advertencias:

-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 contiene:

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

hay muchas más advertencias que hay que activar de forma explícita.

E.g. para nuestro código C usamos:

-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wformat-extra-args -Wformat- nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-miss-init -Wlogical-op -Werror = missing-braces -Wmissing-declarations -Wno-missing-format- atributo -Whissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno- no utilizado -Windowsdic-macros -Wwrite-strings -WC++ - compat -Werror = declaration-after-statement -Werror = implicit-function-declaration -Wmissing-prototypes -Werror = nested-externs -Werror = old-style-definition -Werror = prototipos estrictos

13

suficiente Lamentablemente ninguna de las respuestas está citando a la parte realmente relevantes del manual, lo que realmente atrae a un punto:

Esto permite a todas las advertencias sobre las construcciones que algunos usuarios consideran cuestionable, y que son fáciles de evitar (o modificar para evitar la advertencia), incluso en combinación con macros.

[...]

Tenga en cuenta que algunas banderas de advertencia no están implícitos en -Wall.Algunos de ellos advierten sobre construcciones que los usuarios generalmente no consideran cuestionables, pero que de vez en cuando es posible que desee verificar; otros advierten sobre construcciones que son necesarias o difíciles de evitar en algunos casos, y no hay una forma simple de modificar el código para suprimir la advertencia. Algunos de ellos están habilitados por -Wextra pero muchos de ellos deben habilitarse individualmente.

Ergo:

  • -Wall no no significa "todas las advertencias".
  • Lo hace también no significa "(casi) todo", no por un plano general.
  • Es hace significa un conjunto de opciones individuales que está obligado a cambiar.

En pocas palabras, se trata del mínimo absoluto de advertencias que debe establecer. Mientras que -Wall -Wextra es mejor, todavía no está haciendo uso de todas las comprobaciones de errores que su compilador puede hacer por usted.


Personalmente no iría por menos de -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. Todos mis proyectos actuales realmente usan una lista de advertencias más larga que eso (sin activar ninguno de ellos). Y reviso el manual en cada lanzamiento principal de nuevas opciones. El compilador es tu amigo Use los diagnósticos que pueda ofrecerle.

1

Es enables most warning messages.

Puede encontrar más información si usa g++ --help=warnings.

Cuestiones relacionadas