Avisos do compilador geralmente fornecem dicas úteis para erros comuns de programação. Muitas vezes, recomenda-se transformar avisos do compilador em erros (por exemplo, aqui ). Na minha experiência, isso é útil para evitar que avisos sejam ignorados, especialmente em bases de código maiores ou em sistemas de compilação automatizados. No entanto, alguns avisos são úteis como avisos e não podem ser transformados em erros, seja porque podem ser falsos positivos ou porque a base de código não pode ser adaptada imediatamente, mas isso leva algum tempo de transição.
Como solução alternativa, eu poderia compilar o mesmo código duas vezes:
- Uma execução com a maioria ou todos os avisos habilitados (por exemplo,
-Wextra
), mas sem transformá-los em erros (ou seja, sem-Werror
) - Uma segunda execução com um conjunto menor de avisos, mas com configurações pedantes (ou seja, com a
-Werror
opção de linha de comando)
Dessa forma, o projeto de código se beneficiaria de mais avisos do que poderia corrigir atualmente.
Existe uma maneira de fazer isso diretamente, ou seja, com uma única etapa de compilação, não duas?
Li algumas menções à -Wno-error=[name]
opção em outra pergunta e ela mal foi mencionada na referência de linha de comando mais recente do clang , mas não tenho detalhes. Caso eles forneçam uma solução para a minha pergunta, você poderia explicar melhor o que ela faz e/ou fornecer um link para onde está documentada?
Do documento :
-Werror=foo
para transformar o aviso "foo" em erro,-Wno-error=bar
para transformar o aviso "bar" em aviso mesmo com-Werror
.Agora você precisa navegar pela lista de avisos para selecionar aqueles que você deseja tratar especificamente.
Funciona simplesmente
-Werror=[warning-name]
com gcc e clang: https://godbolt.org/z/s84rT39cTObserve que ele não parece permitir vários avisos. Talvez seja necessário repetir
-Werror=
para cada aviso que você deseja como erro.Documentação do gcc: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Werror_003d Documentação do clang: https://clang.llvm.org/docs/UsersManual.html#cmdoption-Werror
Sim, isso é possível. Com o GCC, por exemplo, você pode usar -Werror= para "Transformar o aviso especificado em um erro".
Para citar toda a parte relevante da documentação:
O Clang suporta a mesma coisa, mas não sei se o MSVC suporta.
Para o Visual Studio, você pode usar o número de aviso como: /we4326
https://learn.microsoft.com/en-us/cpp/build/reference/compiler-option-warning-level?view=msvc-170