-o cambia el nombre del archivo de salida (encontré que usando --help)
¿Pero no puedo averiguar qué -Wall
hace?
-o cambia el nombre del archivo de salida (encontré que usando --help)
¿Pero no puedo averiguar qué -Wall
hace?
man
entradas de los programas si desea saber qué hace un interruptor o qué interruptores están disponibles. La man
página de gcc
se puede leer en linux.die.net/man/1/gcc - puede hacer una búsqueda rápida allí para el texto "-Wall"
Respuestas:
Es la abreviatura de "advertir a todos": activa (casi) todas las advertencias que g ++ puede informarle. Normalmente es una buena idea, especialmente si eres un principiante, porque comprender y corregir esas advertencias puede ayudarte a solucionar muchos tipos diferentes de problemas en tu código.
-Wextra
y -pedantic
.
-Wall -Wextra
y luego leer detenidamente el manual para encontrar tantas advertencias más que pueda habilitar, porque incluso -Wextra
es solo un pequeño subconjunto ...
-Wunreachable-code
algún tiempo, Apple estaría mucho más feliz en estos días. ;-)
Ver man 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 debe activar explícitamente.
Por ejemplo, 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-misses-init -Wlogical-op -Werror = llaves-faltantes -Wmissing-declaraciones -Wno-missing-format-attribute -Wmissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-unused -Wvariadic-macros -Wwrite-strings -Wc ++ -compat -Werror = declaración-tras-declaración -Werror = declaración-de-función-implícita -Wmissing-prototypes -Werror = externs-anidados -Werror = definición-de-estilo-antiguo -Werror = prototipos-estrictos
o simplemente el conjunto de advertencias con https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
Lamentablemente, ninguna de las respuestas cita la parte realmente relevante del manual, lo que realmente lo lleva a un punto:
Esto habilita todas las advertencias sobre construcciones que algunos usuarios consideran cuestionables y que son fáciles de evitar (o modificar para evitar la advertencia), incluso en conjunto con macros.
[...]
Tenga en cuenta que algunos indicadores de advertencia no están implícitos en
-Wall
. Algunos de ellos advierten sobre construcciones que los usuarios generalmente no consideran cuestionables, pero que ocasionalmente es posible que desee verificar; otros advierten sobre construcciones que son necesarias o difíciles de evitar en algunos casos, y no existe una forma sencilla de modificar el código para suprimir la advertencia. Algunos de ellos están habilitados por-Wextra
pero muchos de ellos deben habilitarse individualmente.
Es decir:
-Wall
no no significa "todas las advertencias".En pocas palabras, se trata del mínimo absoluto de advertencias que debe establecer. Si bien -Wall -Wextra
es mejor, todavía no está haciendo uso de todo el error que puede hacer el compilador 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 utilizan una lista de advertencias más larga que eso (sin activar ninguna de ellas). Y reviso el manual en cada versión importante para conocer nuevas opciones. El compilador es tu amigo. Utilice todos los diagnósticos que pueda ofrecerle.
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
mientras compilo g++ -std=c++11
mientras aprendo C ++ y programación? ¿O debería omitir esta parte y comenzar a usar indicadores de mensajes de error más adelante? Si es así, ¿cuándo debo comenzar con los mensajes de error?
Permite advertencias que los escritores de gcc consideran útiles y fáciles de evitar en la fuente. También hay -W (-Wextra en las versiones más recientes) que se consideran útiles pero para los que solucionar falsos positivos puede ser difícil o resultar en 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
Activa todas las advertencias. (se lee como "Advertencia a todos")
-Wall
solo significa "la mayoría de las advertencias" en lugar de "todas las advertencias".
Muestra todas las advertencias. Recomendaría usar también -pedantic
para advertir sobre algunas partes no conformes del código.