"man gcc" em seu console informa tudo sobre este sinalizador e uma simples pesquisa no Google com "gcc -Wall" também ...
David Sauter
Como dica geral, tente ler as manentradas dos programas se quiser saber o que um switch faz ou quais switches estão disponíveis. A manpágina de gccpode ser lida em linux.die.net/man/1/gcc - você pode fazer uma busca rápida lá pelo texto "
-Wall
6
@David Sauter, o Google não encontrará nada com "-wall". Isso excluirá todas as "paredes" da pesquisa.
Kirill V. Lyadvinsky,
@Kirill Não se você usar aspas, como estou supondo que David quis dizer
gnud
1
//, sempre pensei que fosse uma homenagem ao Larry Wall.
Nathan Basanese,
Respostas:
111
É 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.
Mais avisos (alguns dos quais são muito úteis) podem ser ativados com -Wextrae -pedantic.
gnud
7
Não é (quase) tudo. Na verdade, é apenas uma pequena fração dos avisos disponíveis. São aqueles com os quais "todos" concordam. O realmente boa idéia é fazer -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 ...
DevSolar
@DevSolar ponto muito bom. Você sabe se há uma bandeira que significa "literalmente todos os avisos"?
MatrixFrog
1
@MatrixFrog: Infelizmente, essa opção não existe, pelo menos não para os compiladores que conheço. E a lista de avisos disponíveis muda com o tempo ... se a equipe do GCC não tivesse desabilitado há -Wunreachable-codealgum tempo, a Apple estaria muito mais feliz hoje em dia. ;-)
DevSolar
39
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.
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:
-Wallnão faz significa "todos os avisos".
Também não significa "(quase) todos", nem de longe.
Ele não significa um conjunto de opções individuais que é obrigado a mudar .
Resumindo, trata-se do mínimo absoluto de avisos que você deve definir. Embora -Wall -Wextraseja 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.
Comecei a aprender programação em C ++. Estou usando princípios de programação e prática usando cpp . Meu sistema é ubuntu 16.04, eu uso o vscode como meu editor. Você me recomenda usar o seu -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtualenquanto compilo g++ -std=c++11enquanto 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?
scientific_explorer
2
@vkv: Eu acredito que o compilador é realmente seu amigo, e você deve tirar proveito de todos os bons conselhos que ele pode lhe dar.
DevSolar de
6
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.
Para gcc doc: "Alguns usuários tentam usar -pedantic para verificar se os programas estão em conformidade estrita com o ISO C. Eles logo descobrem que ele não faz exatamente o que desejam: ele encontra algumas práticas não ISO, mas não todas - apenas aquelas para as quais ISO C requer um diagnóstico, e alguns outros para os quais diagnósticos foram adicionados. "
AProgrammer de
Não dá 100% de garantia, mas ajuda.
Kirill V. Lyadvinsky,
1
Se você não tivesse escrito some em vez de all in "para alertar sobre todas as partes não conformes", eu não teria comentado. Mas sua formulação atual apenas espalhou o equívoco contra o qual a documentação do gcc avisa.
AProgrammer de
Fixo. Mas, na prática, parece mais um "mais de" e não "alguns".
man
entradas dos programas se quiser saber o que um switch faz ou quais switches estão disponíveis. Aman
página degcc
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.
fonte
-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
fonte
Infelizmente, nenhuma das respostas está citando a parte realmente relevante do manual, o que realmente o leva a um ponto:
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.fonte
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
enquanto compilog++ -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
fonte
isto
enables most warning messages
.Você pode descobrir mais se usar
g++ --help=warnings
.fonte
Ele ativa todos os avisos. (lê-se como "Aviso a todos")
fonte
-Wall
significa apenas "a maioria dos avisos" em vez de "todos os avisos".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.fonte