Pergunta

Eu tinha um erro de digitação desagradável que perdi meu tempo e tempo do meu colega, era algo como isto:

for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug!
{
  // Some awesome logic here
}

Antes de tudo, é muito embaraçoso, segunda coisa, eu nunca deve repetir isto. Eu sou relativamente novo para C. Em Java, eu acho que eu posso usar FindBugs para detectar erros como estes, o que ferramenta devo usar para o código C? Lint?

Foi útil?

Solução

Sim, PC-Lint é provavelmente a melhor ferramenta disponível.

Outras dicas

Além de sugestão PC-Lint de Lykathea , você também pode obter melhores (ou pelo menos mais) diagnósticos se você bater o nível de aviso do compilador. Algo como /W4 ou -Wall

Embora eu não tenho certeza se o seu problema particular teria sido pego com isso (MS VC parece não marcá-lo, mesmo com todos os avisos ativado). Eu acho que é porque não é uma linguagem incomum para loops for estar vazio quando o trabalho é feito como efeitos colaterais das expressões de controle loop.

Algumas coisas que me salvou no passado, a partir do topo da minha cabeça:

  • Use se (3 == bla) em vez de (bla == 3) , porque se você cometer erros de ortografia e tipo (3 = bla) o compilador vai reclamar.

  • Use o todas as advertências- switch. O compilador deve avisá-lo sobre declarações vazias assim.

  • Use afirmações quando você pode e programa defensivamente. Coloque bom esforço em tornar o seu programa falhar cedo, você vai ver os pontos fracos dessa forma.

  • Não tente contornar quaisquer salvaguardas o compilador ou o sistema operacional já postas em prática. Eles estão lá para sua facilidade de programação cabeceira.

Também olhar para análise estática clang

Gostaria de começar por aprender sobre tala e gdb . Se precisar de mais avançado, construir sobre estas duas ferramentas. Mas eles são um bom começo.

GCC tem a maioria das funcionalidades que Lint tem tinham construído na via a advertência bandeiras .

Qualquer ambiente de programação boa GUI ( "IDE" - Integrated Development Environment). Como Eclipse geraria um aviso em um caso como esse

Um marcador boa sintaxe fará alguns casos como este mais visível.

Eu sugiro ver se você tem a capacidade de impor padrões Misra . Eles foram escritos com grande pensamento e muitas regras que são simples para um compilador para verificar. Por exemplo, uma regra que eu uso exige que todos os comandos NOP tem sua própria linha. Isto significa que quando você colocar um; no final de uma instrução de loop que vai através de um erro dizendo que não está em sua própria linha.

QA · C pela programação da investigação é outra ferramenta de análise de boa estático para C.

Nesta (antigo) versão do Como atirar-se no pé, e em muitas outras versões em torno da web, C é sempre a linguagem que permite o procedimento mais simples. Ao programar em C , você tem que lembrar isso e ser cuidadoso. Se você quer proteção, escolha outro idioma.

Este ditado é atribuído para Bjarne Stroustrup (C ++) próprio. Para citar (mis):

"C torna mais fácil para atirar no próprio pé"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top