-o muda o nome do arquivo de saída (descobri isso usando --help)
Mas não consigo descobrir o que -Wall
faz?
-o muda o nome do arquivo de saída (descobri isso usando --help)
Mas não consigo descobrir o que -Wall
faz?
man
entradas dos programas se quiser saber o que um switch faz ou quais switches estão disponíveis. A man
página de gcc
pode ser lida em linux.die.net/man/1/gcc - você pode fazer uma busca rápida lá pelo texto "
Respostas:
É a abreviatura de "warn all" - ativa (quase) todos os avisos que o g ++ pode informar. Normalmente uma boa ideia, especialmente se você for um iniciante, porque entender e corrigir esses avisos pode ajudá-lo a corrigir muitos tipos diferentes de problemas em seu código.
-Wextra
e -pedantic
.
-Wall -Wextra
, em seguida, examinar o manual para encontrar tantas mais avisos que você poderia permitir que possível, porque mesmo -Wextra
é apenas um pequeno subconjunto ...
-Wunreachable-code
algum tempo, a Apple estaria muito mais feliz hoje em dia. ;-)
Veja man gcc.
-Wall ativa estes avisos:
-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 contém:
-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)
Existem muitos outros avisos que você deve ativar explicitamente.
Por exemplo, para o nosso 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 = missing-braces -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-unused -Wvariadic-macros -Wwrite-strings -Wc ++ -compat -Werror = declaração-após-declaração -Werror = declaração de função implícita -Wmissing-prototypes -Werror = nested-externs -Werror = definição de estilo antigo -Werror = protótipos estritos
ou apenas o conjunto de avisos com https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
Infelizmente, nenhuma das respostas está citando a parte realmente relevante do manual, o que realmente o leva a um ponto:
Isso permite todos os avisos sobre construções que alguns usuários consideram questionáveis e que são fáceis de evitar (ou modificar para evitar o aviso), mesmo em conjunto com macros.
[...]
Observe que alguns sinalizadores de aviso não estão implícitos em
-Wall
. Alguns deles alertam sobre construções que os usuários geralmente não consideram questionáveis, mas que ocasionalmente você pode querer verificar; outros avisam sobre construções que são necessárias ou difíceis de evitar em alguns casos, e não há uma maneira simples de modificar o código para suprimir o aviso. Alguns deles são ativados por,-Wextra
mas muitos deles devem ser ativados individualmente.
Logo:
-Wall
não faz significa "todos os avisos".Resumindo, trata-se do mínimo absoluto de avisos que você deve definir. Embora -Wall -Wextra
seja melhor, ele ainda não está fazendo uso de todas as verificações de erros que seu compilador pode fazer por você.
Pessoalmente, eu não iria por menos de -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
. Todos os meus projetos atuais realmente usam uma lista de avisos mais longa do que isso (sem acionar nenhum deles). E eu verifico o manual em cada versão principal para novas opções. O compilador é seu amigo. Use todos os diagnósticos que ela puder oferecer.
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
enquanto compilo g++ -std=c++11
enquanto aprendo c ++ e programação? Ou devo pular esta parte e começar a usar sinalizadores de mensagens de erro mais tarde? Em caso afirmativo, quando devo começar com as mensagens de erro?
Permite avisos considerados úteis e fáceis de evitar na fonte pelos escritores do gcc. Há também -W (-Wextra em versões mais recentes) que são considerados úteis, mas para os quais contornar falsos positivos pode ser difícil ou resultar em código desajeitado.
O gcc também tem vários outros avisos, geralmente menos úteis. Consulte http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
Mostra todos os avisos. Eu recomendaria também usar -pedantic
para alertar sobre algumas partes do código que não estão em conformidade.