c++ - compile - g++ ubuntu
¿Qué hace “-Wall” en “g++-Wall test.cpp-o test”? (7)
Es la abreviatura de "advertir a todos": activa (casi) todas las advertencias de las que g ++ puede informarle. Por lo general, es una buena idea, especialmente si eres un principiante, porque entender y corregir esas advertencias puede ayudarte a solucionar muchos tipos diferentes de problemas en tu código.
-o cambia el nombre del archivo de salida (encontré que usando --help)
Pero no puedo averiguar qué hace -Wall
?
Habilita 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 las cuales los falsos positivos pueden ser difíciles o resultar en un código torpe.
gcc también tiene un montón de otras advertencias, generalmente menos útiles. Consulte http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
Habilita todas las advertencias. (Lee como "Advertencia a todos")
Lamentablemente, ninguna de las respuestas está citando 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 combinación con macros.
[...]
Tenga en cuenta que algunas banderas de advertencia no están implícitas en
-Wall
. Algunos de ellos advierten sobre construcciones que los usuarios generalmente no consideran cuestionables, pero que de vez en cuando puede buscar; otros advierten sobre las 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 significa "todas las advertencias". - Tampoco significa "(casi) todo", ni mucho menos.
- 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. Si bien -Wall -Wextra
es mejor, todavía no hace uso de todos los errores que el 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 usan una lista de advertencias más largas que eso (sin activar ninguna de ellas). Y sí reviso el manual en cada versión principal para nuevas opciones. El compilador es tu amigo. Utilice cualquier diagnóstico que pueda ofrecerle.
Muestra todas las advertencias. Recomiendo también usar -pedantic
para advertir sobre algunas partes de código no conformes.
Ver man gcc.
-Mural 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 debes 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-miss-init -Wlogical-op -Werror = llaves faltantes -Wmissing-declarations -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 -used -Wvariadic-macros -Wwrite-strings -Wc ++ -compat -Werror = declaración-después-declaración -Werror = declaración-función-implícita -Wmissing-prototypes -Werror = nested-externs -Werror = definición de estilo antiguo -Werror = strict-prototypes
o simplemente el conjunto de advertencias con https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
enables most warning messages
.
Puede encontrar más información si usa g++ --help=warnings
.