Comecei a trabalhar em vários projetos C que estão construindo usando gcc
. Acredito que essa escolha foi feita por vários motivos:
- Tive que fazer uma compilação cruzada para o braço muito cedo (eu acho).
- O desempenho é a primeira e mais importante especificação.
gcc
foi e ainda é a primeira escolha fácil.
Não tenho motivos para contestar essa escolha e não estou em posição de fazê-lo de qualquer maneira.
A base de código de qualquer projeto único é relativamente pequena. Todo projeto é construído com um Makefile relativamente limpo (atualmente sendo atualizado), gcc -Wall -Wextra
não se queixa quase e é feito um teste mínimo. Não há análise estática automatizada ou formatação de código, e o código é sintaxe não consistente, embora seja muito legível e pareça pensado.
Não quero reformatar todas as linhas de código de uma só vez, pretendo fazer o que está descrito em alguma parte desta resposta (especialmente porque o contexto não é tão ruim): refatorar e reformatar o máximo possível ao lidar com qualquer tópico, mas ainda abordando tópicos sem nenhuma intenção de estilo de código. Infelizmente, não estou em posição de impor um estilo de código ou verificações adicionais nas confirmações, mas sinto que há uma sensação entre meus colegas de que você deve respeitar a convenção de código existente ao modificar um arquivo (embora eu esteja ciente do estado atual do código não aconteceu magicamente) e um desejo de escrever um bom código.
Esta é minha primeira vez em programação em C com esse estado de espírito, e estou muito atraído pelas várias ferramentas de análise e formatação de código clang
fornecidas.
A essência da minha pergunta é: poderia levar a problemas para seguir as clang
dicas e usar clang
ferramentas de formatação e análise durante a construção gcc
? Por exemplo, alguns avisos podem vir de uma representação interna gcc
não usada ou do bytecode clang
pretendem gerar isso gcc
não.
Existe uma boa maneira de passar automaticamente os gcc
parâmetros de compilação (principalmente a arquitetura de destino e o nível de otimização) para clang
que as dicas de aviso façam sentido?
Acrescentarei que estou familiarizado gcc
e com o relatório de erros. Estou interessado em receber mais avisos e erros (relevantes), não apenas avisos mais redigidos e mais compreensíveis. Portanto, se não posso confiar em dicas adicionais que clang
podem ser produzidas com base em sua representação interna, porque eu desenvolvo gcc
no final do dia, não estou realmente interessado em fazer isso.
Incluí muito contexto; portanto, sinta-se à vontade para fazer qualquer observação ou responder a qualquer pergunta subjacente que não pude fazer.
fonte
Respostas:
Extremamente improvável. Clang está avisando sobre seu código, não sobre alguma representação interna que ele usa. Todos os avisos devem derivar de algo suspeito que você está fazendo no seu código, não de detalhes de implementação do clang.
Onde você pode ter problemas é se algum código que você estiver usando usar C ++ não padrão. O GCC suporta várias extensões do C ++ que não serão aceitas por outros compiladores. Se você usar alguma dessas opções, o clang pode simplesmente se recusar a compilar seu código. O GCC precisa oferecer suporte à compilação de muitos códigos antigos e (como eu o entendo) é mais brando em alguns pontos do que o Clang.
fonte
Estou usando os dois no trabalho, gcc e clang. Você receberá mais avisos com os dois compiladores juntos, é claro, e isso é ótimo. Por outro lado, os avisos podem se contradizer.
O caso mais irritante que encontrei é quando clang detecta uma
default
regraswitch
e diz que todos os valores já estão cobertos e o gcc insiste em ter umdefault
caso (documentado aqui ). Mas você só verá essa contradição ao configurar avisos muito estritos nos dois compiladores.Subjetivamente, eu diria que o clang tem avisos mais rígidos e você pode obter mais deles se usar
-Weverything
ou mesmo o analisador de clang (analisador de código estático). Mas também recebi avisos que o gcc descobriu e também foram importantes.A maioria das opções do compilador tem exatamente o mesmo nome. Os nomes das opções de aviso diferem. Isso pode ser irritante se você decidir usar
-Wno-*
opções para desativar os avisos. Você não poderá evitar a compilação condicional no make / cmake, até onde eu posso ver, mas não é difícil resolver isso.Eu evitaria formatar o código com ferramentas automáticas. É irritante porque polui a saída da culpa. E as fusões de longa duração podem se tornar muito difíceis.
fonte