Este projeto inclui ferramentas e listas para descobrir todos os sinalizadores de aviso que o compilador CLANG e a coleção do compilador GNU têm para os idiomas da família C (C, C ++ e Objective-C). Isso também mostra todos os aliases e sinalizadores de aviso que um determinado sinalizador permite (prefixado com o personagem "#") para que você possa ver facilmente qual sinalizador está ativado pelo quê. Também existem sinalizadores de alerta que não fazem nada por motivos de compatibilidade ou depreciação. Eles são sufixados com o texto "# dummy switch".
O objetivo dessas coleções é facilitar o uso das ferramentas de análise de código estático que os compiladores fornecem.
Clang inclui bandeira -Weverything
, que não é mostrada nessas listas, que permite todos os avisos. A documentação do CLANG fornece referência para alguns dos sinalizadores de diagnóstico em Clang.
Se você precisar de uma lista completa de opções de aviso do GCC, para uma versão específica do GCC que você possui, poderá executar o GCC com gcc --help=warnings
para obter essa lista. Caso contrário, algumas listas de opções de aviso do GCC simples estão disponíveis abaixo:
Um caso de uso para esses tipos de listas é ver quais diferenças existem entre diferentes compiladores e versões do compilador. Eu disponibilizei as diferenças de sinalizador de compilador rudimentar entre duas versões consequentes do compilador como arquivos difíceis, mas para diferenças mais específicas, você precisa usar algum programa (visual) diff, como mostrado abaixo:
Isso usa o ANTLR como um gerador de analisador com algum código Python de suporte para analisar sinalizadores de aviso dos arquivos de dados da opção de compilador real. Outros requisitos estão seguindo (mais suas dependências):
Depois de instalar todos os requisitos e poder executar o ANTLR com o comando antlr4
, basta usar os seguintes comandos em parsers/
diretório para gerar essas listas:
ninja
./parse-clang-diagnostic-groups.py <path-to-clang-source>/include/clang/Basic/DiagnosticGroups.td
./parse-gcc-warning-options.py <path-to-gcc-source>/gcc/{common.opt,c-family/c.opt}
E você receberá a lista de todos os sinalizadores de aviso individuais e suas dependências que estão na versão do compilador solicitado.
Para gerar listas filtradas, você pode usar --top-level
e --unique
.
--top-level
não inclui avisos que são ativados por algum outro interruptor na lista.--unique
lista todos os avisos sem nenhuma informação quais outros avisos eles permitem. Os diferenciais nesta página são criados a partir desses arquivos. Existem alguns testes de unidade testando a funcionalidade de baixo nível. Você pode executar o tempo com o comando ninja test
em parsers/
diretório para verificar se os testes de unidade passam.
Quando o Parser obtém uma alteração que afeta a formatação ou outra saída para vários arquivos, essas listas de aviso precisam ser recriadas. Existem scripts process-clang-git.sh
e process-gcc-git.sh
que assumem a raiz do repositório Git como seu primeiro parâmetro e aplicam todas as diferentes variantes desses comandos para criar arquivos de texto final.