Question

J'avais une mauvaise typo qui m'a fait perdre mon temps et celui de mon collègue, c'était à peu près comme ça:

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

Tout d’abord, c’est très embarrassant, deuxième chose, je ne devrais jamais le répéter. Je suis relativement nouveau en C. En Java, je suppose que je peux utiliser FindBugs pour intercepter des erreurs comme celles-ci. outil dois-je utiliser pour le code C? Lint?

Était-ce utile?

La solution

Oui, PC-Lint est probablement le meilleur outil disponible.

Autres conseils

En plus du suggestion PC-Lint de Lykathea , vous pouvez également obtenir de meilleurs diagnostics (ou au moins plus) si vous augmentez le niveau d’avertissement du compilateur. Quelque chose comme / W4 ou -Wall

Bien que je ne sois pas sûr si votre problème particulier aurait été réglé avec ceci (MS VC ne semble pas le signaler, même si tous les avertissements sont activés). Je pense que c’est parce que ce n’est pas un idiome rare que des balises pour soient vides lorsque le travail est effectué en tant qu’effets secondaires des expressions de contrôle de boucle.

Quelques choses qui m'ont sauvé dans le passé, du fond de ma tête:

  • Utilisez si (3 == bla) plutôt que (bla == 3) , car si vous orthographiez et orthographiez mal (3 = bla), le compilateur se plaindra.

  • Utilisez le commutateur Tous les avertissements . Votre compilateur doit vous prévenir de telles instructions vides.

  • Utilisez des assertions lorsque vous le pouvez et programmez de manière défensive. Faites de gros efforts pour que votre programme échoue tôt, vous verrez les faiblesses de cette façon.

  • N'essayez pas de contourner les sauvegardes mises en place par le compilateur ou le système d'exploitation. Ils sont également là pour faciliter votre programmation.

Regardez également une analyse statique globale

Je commencerais par apprendre les attelle et gdb . Si vous avez besoin de plus d’avancés, utilisez ces deux outils. Mais ils sont un bon début.

GCC possède la plupart des fonctionnalités intégrées à Lint via warning drapeaux .

Tout bon environnement de programmation graphique ("IDE" - Environnement de développement intégré) tel qu'Eclipse générerait un avertissement dans un cas comme celui-ci.

Un bon surligneur de syntaxe rendra certains cas comme celui-ci plus visibles.

Je vous conseillerais de vérifier si vous avez la possibilité de appliquer les normes MISRA . Ils ont été écrits avec beaucoup de réflexion et de nombreuses règles simples à vérifier pour un compilateur. Par exemple, une règle que j'utilise nécessite que toutes les commandes NOP aient leur propre ligne. Cela signifie que lorsque vous mettez un; à la fin d'une déclaration de boucle, il y aura une erreur en disant que ce n'est pas sur sa propre ligne.

QA & # 183; C par Programming Research est un autre bon outil d'analyse statique pour C.

Dans cette (ancienne) version de Comment se tirer une balle dans la tête Dans le Foot et dans de nombreuses autres versions du Web, C est toujours le langage qui permet la procédure la plus simple. Lors de la programmation dans C , vous devez vous en souvenir et faire attention. Si vous souhaitez une protection, choisissez une autre langue.

Cet adage est attribué à Bjarne. Stroustrup (C ++) lui-même. Pour (mal) citer:

  

"C, il est facile de se tirer une balle dans le pied"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top