O que faz "-Wall" Em "g++ -Wall test.cpp-o test " do?

- o altera o nome do ficheiro de saída (descobri que usando o --help)

Mas não consigo descobrir o que faz?

 65
Author: sharptooth, 2010-03-09

7 answers

É o diminutivo de" warn all " -- liga (quase) todos os avisos de que o g++ lhe pode falar. Tipicamente uma boa idéia, especialmente se você é um iniciante, porque compreender e corrigir esses avisos pode ajudá-lo a corrigir muitos tipos diferentes de problemas em seu código.

 83
Author: MatrixFrog, 2010-03-09 09:55:55

Ver man gcc.

-A Parede liga 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)

Há muitos mais avisos que você tem que ligar explicitamente.

Por exemplo, para o nosso código C usamos:

-Parede -Wextra -Waggregate-retorno-Wcast-alinhar -Wcast-qual-Wdisabled-otimização -Wdiv-por-zero -Wendif-etiquetas -Wformat-extra-args -Wformat-não-literais -Wformat-segurança -Wformat-y2k -Wimplicit -Wimport -Winit-auto -linhas de prêmio -Winvalid-pch -Wjump-perde-init-Wlogical-op -Werror=ausente-chaves-Wmissing-declarações-Wno-falta-formato atributo-Wmissing-incluem-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-tipo -Wsequence-ponto -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-padrão -Werror=undef -Wno-não utilizado -Wvariadic-macros -Wwrite-cordas -Wc++-compat-Werror=declaração-depois-declaração -Werror=implícito-função-declaração -Wmissing-protótipos -Werror=nested-externos -Werror=antigo-estilo-definição - Werror=strict-prototypes

Ou apenas o conjunto de advertências com https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html

 24
Author: rurban, 2018-07-11 18:31:07
Infelizmente, nenhuma das respostas está a citar a parte relevante do manual, o que realmente o leva a um ponto:

Isto permite todas as advertências sobre construções que alguns utilizadores consideram questionável, e que são fáceis de evitar (ou modificar para evitar o aviso), mesmo em conjunto com macros.

[...]

Note que algumas bandeiras de aviso não estão implícitas por -Wall. Alguns deles advertem acerca de construções que os utilizadores geralmente não considere questionável, mas que ocasionalmente você pode querer verificar; outros alertam sobre construções que são necessários ou difíceis de evitar em alguns casos, e não há nenhuma maneira simples de modificar o código para suprimir o aviso. Alguns deles estão habilitados por -Wextra mas muitos deles devem ser habilitados individualmente.

Ergo:

  • -Wall Não significa todos os avisos.
  • Também não significa "(quase) todos", não por muito tempo. tiro.
  • significa um conjunto de opções individuais que está obrigado a mudar.

Resumindo, é sobre o mínimo absoluto de avisos que você deve definir. Embora -Wall -Wextra seja melhor, ainda não está a fazer uso de todos os erros que a verificação do seu compilador pode fazer por si.


Pessoalmente, não aceitaria menos do que isso. Todos os meus projetos atuais realmente usam uma lista de Avisos por mais tempo do que isso (sem ativar nenhum deles). E eu verifico ... manual em cada lançamento principal para novas opções. O compilador é teu amigo. Use qualquer diagnóstico que possa oferecer.
 14
Author: DevSolar, 2014-02-06 09:38:35

Permite avisos que são considerados úteis e fáceis de evitar na fonte pelos escritores do CCG. Há também-W (- Wextra em lançamentos mais recentes) que são considerados úteis, mas para os quais os falsos positivos podem ser difíceis ou resultar em código desajeitado.

O Gcc também tem um monte de outros avisos, geralmente menos úteis. Ver http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options

 6
Author: AProgrammer, 2010-03-09 10:09:30

Permite todos os avisos. (lê-se como "aviso a todos")

 1
Author: Bjorn J, 2010-03-09 09:56:03

It enables most warning messages.

Pode descobrir mais se utilizar g++ --help=warnings.

 1
Author: Yuval, 2015-01-17 21:38:37
Mostra todos os avisos. Eu recomendaria também usar {[[0]} para avisar sobre algumas partes não-conformantes do Código.
 0
Author: Kirill V. Lyadvinsky, 2010-03-09 12:50:48