# C et C++ > Outils pour C & C++ > Analyse de code >  Vrification statique de code

## Davidbrcz

Bonjour  tous.

Je travaille actuellement dans un projet de robotique et j'cris du code plus ou moins bas niveau.

A divers endroits du code, je manipule des entits qui sont existent physiquement sur ma carte. Par exemple, j'ai un lment qui ne peut tre branch que sur les pins 2,3 18, 19, 20 ou 21 de ma carte et pas une autre. 

Je souhaiterait automatiser les vrifications pour assurer qu'au moins, le code se base sur des pins "acceptables". Les classes se basant sur des template, je pensais faire un coup de mta prog pour vrifier que l'entier est bien dans un vecteur de boost::mpl mais j'ai 1 souci principal : le poids du code mort. La carte n'a pas de la place illimite et j'ai peur que ca en mange pour rien. (par ailleurs, j'ai pas essay boost avec avr-g++, pas sr que ca passe)

A la suite de cette discussion Je pensais donc me tourner vers un outil entirement externe. Sauf que l, je sche : je n'ai pas le moindre nom de logiciel en tte qui soit gratuit et tourne sous linux.

Si vous pouvez clairer ma lanterne !
Merci.

----------


## koala01

Salut,

Dj, normalement, si tu passes par la programmation gnrique et que tu restreins tes politiques aux seules valeur acceptable, tu devrais pouvoir viter pas mal de problmes, pour un code qui, au final, ne devrait pas tre particulirement plus gros, vu que les grosses vrifications se font  la compilation.

Par contre, wikipedia parle de lint sous linux.. L'as tu essay?

----------


## Davidbrcz

> et que tu restreins tes politiques aux seules valeur acceptable,


Effectivement, j'avais oubli qu'un static_assert accepte n'importe quelle expression logique valide  ::aie:: . 

Problme rsolu

----------


## koala01

Ceci dit, aprs avoir lu l'article en question, je ne peux m'empcher de penser que l'utilisation d'un bon outil d'analyse statique du code ne peut qu'apporter une qualit non ngligeable...

Malheureusement, il semble que, encore une fois, linux fasse figure de parent pauvre en terme d'outils efficaces dans le domaine  ::aie:: 

Ce qui est, quand on y pense, un comble tant donn le nombre de dveloppements pour lesquels on utilise linux  ::D: .

Enfin, si tu trouves un outil efficace, n'hsites pas  nous en faire part  :;):

----------


## gbdivers

Je connais pas les outils cits dans l'article, mais cpp check n'est pas un quivalent ? 
De plus, sans avoir personnellement fait, je sais qu'il est possible dans cpp check d'ajouter ses propres rgles

----------


## LittleWhite

Bonjour,

Depuis un certains article de Carmack, j'ai fait un peu des recherches.
Pour Linux (gratuit), j'ai trouv les trois outils suivant :

cppcheck
oink
flawfinder

Malheureusement, je n'ai pas eu le temps de tester tout cela.

----------


## koala01

Mais, ceci dit, pour rebondir sur


> Effectivement, j'avais oubli qu'un static_assert accepte n'importe quelle expression logique valide . 
> 
> Problme rsolu


A vrai dire, je ne pensais mme pas au static_assert, mais "juste"  une srie de traits correctement tudis  ::aie:: 

Je m'explique... : Tu parles d'lments qui peuvent tre branchs sur les pins  2,3 18, 19, 20 ou 21.

Cela signifie que si tu obtiens quelque chose sur "n'importe quel autre pin" (quel que soit son numro), tu ne dois pas l'accepter, et que si tu essaye d'accder  l'tat de l'un de ces "n'importe quel autre" pin, il peut sembler correct de refuser la compilation...

Je serais donc parti, assez benoitement, sur quelque chose comme


```

```

avec comme rsultat le fait que PinTrait<8>::value; est accept, alors que  PinTrait<XXX>::value (o XXX n'est pas une valeur utilisable) sera refus  la compilation, mme si c'est avec un message relativement cryptique  :;): 

Encore faut il voir si cela correspond  tes besoins, bien sur  :;):

----------


## Davidbrcz

koala01 >> Ca fait trop de classe. Je n'ai que 256Kb de flash. Et mon binaire pse dj 15kb.

LittleWhite >> merci pour les liens. Je connaissais Flawfinder et il traque plus des bugs de scurit.

Cependant, le premier me semble correspondre  ce que je recherche ! A creuser

----------


## 3DArchi

Salut,
En embarqu, les outils d'analyse de code type lint, Qac ou polyspace, je les ai vu employer pour vrifier des rgles de codage (MISRA par expl et +), des rgles de 'formattage' (nbr d'espace, retour  la ligne, etc.), mais jamais pour vrifier l'utilisation des bonnes pins.

@david : je ne comprends pas ta dernire remarque. Ces classes ne gnrent pas de code comme en gnral ce qui relve de la mta-prog?

Pour le support boost/Avr, il semblerait que d'autres aient tent l'aventure : cf ici

----------


## screetch

d'apres mes tests, avoir les structs en template ou le nombre directement n'affecte pas la taille du binaire, meme en version debug. Ca affecte la taille des informations de debug mais elles doivent etre strippees pour gagner de la place je pense  ::):

----------

