Além de -Wall, que outros avisos as pessoas acharam úteis?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
c
gcc
compiler-errors
Sard
fonte
fonte
-Wdeclaration-after-statement
' para detectar código que o MSVC (que ainda é basicamente um compilador C89) não consegue lidar. É um incômodo. Adicionar '-Wextra
' pode detectar alguns outros problemas também.-O3
ou algo semelhante; existem avisos que são gerados apenas quando o código é otimizado.-m32
e-m64
(em execuções separadas, é claro) oferece melhor proteção contra vários bugs na maneira como você usaprintf()
e nasscaf()
especificações de conversão.Em 01-09-2011, com gcc versão 4.6.1
Meu atual alias de "desenvolvimento"
O alias de "lançamento"
Em 03-11-2009
alias de "desenvolvimento"
"release" alias
fonte
-Wfloat-equal
adicionado ao meu alias. Obrigado Mark-Wstrict-aliasing=2
na verdade reduz o nível de aviso de-Wstrict-aliasing=3
implícito por-Wall
, pelo menos com uma versão recente do gcc.Eu gosto de -Werror. Mantém o código de advertência livre.
fonte
#warning
um bom efeito colateral do uso-Werror
.-Werror
por padrão em suas compilações, isso irrita os empacotadores que estão usando versões de compilador diferentes de você, já que os avisos mudam com a versão do compilador, às vezes o código que é gratuito para você terá um aviso para outra pessoa e então eles têm que cavar em seu sistema de compilação para desligá-lo.Comecei com C ++, então, quando mudei para aprender CI, fiz questão de ser extra-anal:
fonte
Obtenha o manual da versão do GCC que você usa, encontre todas as opções de aviso disponíveis e desative apenas aquelas para as quais você tem um motivo convincente para fazê-lo. (Por exemplo, cabeçalhos de terceiros não modificáveis que, de outra forma, forneceriam muitos avisos.) Documente esses motivos. (No Makefile ou onde quer que você defina essas opções.) Reveja as configurações em intervalos regulares e sempre que atualizar seu compilador.
O compilador é seu amigo. Os avisos são seus amigos. Dê ao compilador a maior chance possível de informá-lo sobre possíveis problemas.
fonte
Eu também uso:
Para detectar aqueles bugs desagradáveis que podem ocorrer se eu escrever um código que depende do comportamento de estouro de inteiros.
E:
O que permite algumas opções que também são boas. A maioria é para C ++.
fonte
Eu geralmente compilo com "-W -Wall -ansi -pedantic" isso ajuda a garantir a máxima qualidade e portabilidade do código.
fonte
-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter
Para o modo "Me machuque bastante", deixo de fora o -Wno ...
Gosto de ter meu código livre de avisos, especialmente com C ++. Embora os avisos do compilador C possam frequentemente ser ignorados, muitos avisos do C ++ mostram defeitos fundamentais no código-fonte.
fonte
Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}
-> relativamente difícil de detectar. Se você estiver incomodado com esse aviso, você deve simplesmente comentar o parâmetrofoo (int /*q*/)
, pois isso também aumenta a legibilidade do seu código.-pedantic-errors
fonte
clang
(o compilador C do projeto LLVM) e depois compilar com-Weverything
e você verá como a compilação muito divertida pode realmente se tornar (alguns dos avisos são totalmente malucos, mas estão tecnicamente corretos).-Wfloat-equal, -Wshadow, -Wmissing-prototypes,
fonte
-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implícito-função-declaração -Wunused -Wno-unused-value -Wreturn-type
fonte
Agora eu uso:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
Peguei essa lista principalmente do livro "Uma introdução ao gcc" e, em seguida, algumas das recomendações de Ulrich Drepper sobre Programação Defensiva ( http://people.redhat.com/drepper/Defensive-slides.pdf ).
Mas não tenho nenhuma ciência por trás da minha lista, apenas parecia uma boa lista.
/ Johan
Nota: Eu não gosto dessas bandeiras pedantes ...
Nota: Eu acho que -W e -Wextra são mais ou menos a mesma coisa.
fonte
Eu geralmente só uso
fonte
O aviso sobre variáveis não inicializadas não funciona a menos que você especifique
-O
, então incluo isso em minha lista:-g -O -Wall -Werror -Wextra -pedantic -std=c99
fonte
-Wfatal-errors
fonte