Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Analyseur de code C++

16 réponses
Avatar
Yannick
Bonjour =E0 tous,

nouveau dans les NewsGroups Google, je me r=E9jouis de trouver des
TCLeurs, Pythoniens et autres C++eurs :o)

Je suis =E0 la recherche d'un bon alalyseur de code C++ (genre PC Lint)
afin d'int=E9grer un bon vieux contr=F4le de mon code avant de le
compiler... une =E9tourderie =E9tant si vite arriv=E9e O:-}

Merci d'avance pour votre aide !

Yannick.

PS : si c'est gratuit, c'est encore mieux pour mon portefeuille...

10 réponses

1 2
Avatar
Olivier Miakinen

nouveau dans les NewsGroups Google,


Qu'est-ce que c'est ? ©

je me réjouis de trouver des
TCLeurs, Pythoniens et autres C++eurs :o)


Bon, si ce n'est pas un troll, sache que ce groupe ne fait pas partie
des groupes de Google, même si Google groupes offre une passerelle web
vers usenet.

Je suis à la recherche d'un bon analyseur de code C++ (genre PC Lint)
afin d'intégrer un bon vieux contrôle de mon code avant de le
compiler... une étourderie étant si vite arrivée O:-}


Par curiosité : pourquoi ne pas te fier à l'analyse du code faite par le
compilateur lui-même ?


--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
Jean-Marc Bourguet
Olivier Miakinen <om+ writes:

Je suis à la recherche d'un bon analyseur de code C++ (genre PC Lint)
afin d'intégrer un bon vieux contrôle de mon code avant de le
compiler... une étourderie étant si vite arrivée O:-}


Par curiosité : pourquoi ne pas te fier à l'analyse du code faite par le
compilateur lui-même ?


Lint fait entre autres des verifications inter-modules que le
compilateur ne fait pas. Mais il me semble que PC Lint agit sur du
C++.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Chanclou
Cela m'intéresse aussi. Actuellement, je travaille sur de la génération de code. Et l'intérêt d'avoir une analyse du
code (comme java c'est le faire me semble-t-il !) est de pouvoir analyser ce que l'utilisateur souhaite garder (ce qu'il
a modifié) et ce qui est à regénérer (tout le reste).
Exemple pratique je génère une classe de base et une dérivée d'implémentation. Via mon modèle je rajoute une nouvelle
méthode à ma classe. La classe de base est regénérée de A à Z, elle intègre facilement l'ajout. En revanche, dans la
classe d'implémentation, si je n'ai pas d'analyse de code, je suis incapable d'insérer la déclaration et
l'implémentation minimale de la méthode au bon endroit sans risquer d'altérer quelquechose. L'utilisateur au lieu de
remplir ce squelette de méthode doit taper la déclaration et l'implémentation (même si c'est un simple copier/coller
depuis la classe de base). C'est ce qu'il ce passe d'ailleurs dans Qt3, je ne sais pas si Qt 4 le gère différement.
Avatar
Aurelien Regat-Barrel
Cela m'intéresse aussi. Actuellement, je travaille sur de la génération
de code. Et l'intérêt d'avoir une analyse du code (comme java c'est le
faire me semble-t-il !) est de pouvoir analyser ce que l'utilisateur
souhaite garder (ce qu'il a modifié) et ce qui est à regénérer (tout le
reste).
Exemple pratique je génère une classe de base et une dérivée
d'implémentation. Via mon modèle je rajoute une nouvelle méthode à ma
classe. La classe de base est regénérée de A à Z, elle intègre
facilement l'ajout. En revanche, dans la classe d'implémentation, si je
n'ai pas d'analyse de code, je suis incapable d'insérer la déclaration
et l'implémentation minimale de la méthode au bon endroit sans risquer
d'altérer quelquechose. L'utilisateur au lieu de remplir ce squelette de
méthode doit taper la déclaration et l'implémentation (même si c'est un
simple copier/coller depuis la classe de base). C'est ce qu'il ce passe
d'ailleurs dans Qt3, je ne sais pas si Qt 4 le gère différement.


Je ne sais pas si c'est ce que tu recherches, mais peut être que gccxml
peut te convenir.

--
Aurélien Regat-Barrel

Avatar
Yannick

je me réjouis de trouver des
TCLeurs, Pythoniens et autres C++eurs :o)


Bon, si ce n'est pas un troll, sache que ce groupe ne fait pas partie
des groupes de Google, même si Google groupes offre une passerelle web
vers usenet.


Ok, ô temps pour moi. Ce n'est qu'une passerelle :-{

Je suis à la recherche d'un bon analyseur de code C++ (genre PC Lint)
afin d'intégrer un bon vieux contrôle de mon code avant de le
compiler... une étourderie étant si vite arrivée O:-}


Par curiosité : pourquoi ne pas te fier à l'analyse du code faite par le
compilateur lui-même ?


Tout simplement parce que ce genre de bouts de code :
void maClasse::MetAjourTableauOctets()
{
m_MonTableauDoctets[m_MaLongueurDeTableauDoctet - 1] = '';
}
passe très bien à la compil.

Par contre, un outil d'analyse de code te dira : "attention, si
m_MaLongueurDeTableauDoctet vaut 0 ou une valeur supérieure à la
taille de m_MonTableauDoctets + 1, vous écrivez dans une zone non
réservée pour votre tableau" (en un peu moins verbeux).

Yannick.


Avatar
Michel Decima
In news:,
Yannick typed:
Par curiosité : pourquoi ne pas te fier à l'analyse du code faite
par le compilateur lui-même ?


Tout simplement parce que ce genre de bouts de code :
void maClasse::MetAjourTableauOctets()
{
m_MonTableauDoctets[m_MaLongueurDeTableauDoctet - 1] = '';
}
passe très bien à la compil.

Par contre, un outil d'analyse de code te dira : "attention, si
m_MaLongueurDeTableauDoctet vaut 0 ou une valeur supérieure à la
taille de m_MonTableauDoctets + 1, vous écrivez dans une zone non
réservée pour votre tableau" (en un peu moins verbeux).


J'ai du mal a voir l'utilité de ce type d'avertissement dans le cadre du
bout de code ci-dessus (avec une longueur que je suppose membre de
la classe).


Avatar
Fabien LE LEZ
On Tue, 4 Jul 2006 13:49:38 +0200, "Michel Decima"
:

void maClasse::MetAjourTableauOctets()
{
m_MonTableauDoctets[m_MaLongueurDeTableauDoctet - 1] = '';
}


J'ai du mal a voir l'utilité de ce type d'avertissement dans le cadre du
bout de code ci-dessus (avec une longueur que je suppose membre de
la classe).


Si la classe en question n'est pas triviale, elle risque d'évoluer, et
la valeur de "m_MaLongueurDeTableauDoctet" pourrait très bien, un
jour, se retrouver égale à 0, ou supérieure à la taille de
"m_MonTableauDoctets".

Ce code me paraît effectivement incorrect :

- Si on est absolument sûr que la valeur de
"m_MaLongueurDeTableauDoctet" est forcément correcte, il faut
expliquer pourquoi dans un commentaire.

- Un assert() ne serait pas inutile -- ne serait-ce que
assert (m_MaLongueurDeTableauDoctet>0)

- On a deux variables qui me semblent liées : m_MonTableauDoctets et
m_MaLongueurDeTableauDoctet. Elles devraient AMHA être regroupées dans
une classe :

class TableauOctets
{
public:
// l'interface
private:
un_type_quelconque data;
size_t longueur;
};

Ainsi, le nombre réduit de fonctions permettrait de s'assurer que
"longueur" a toujours une valeur correcte.


Avatar
Yannick
Merci Fabien,

j'ai bien conscience que ce code n'est pas bon, mais c'était juste un
exemple montrant qu'un code qui compile n'est pas forcément un bon
code ;o)

Mais j'apprécie ta démarche d'analyse et d'abstraction,

Yannick.


On Tue, 4 Jul 2006 13:49:38 +0200, "Michel Decima"
:

void maClasse::MetAjourTableauOctets()
{
m_MonTableauDoctets[m_MaLongueurDeTableauDoctet - 1] = '';
}


J'ai du mal a voir l'utilité de ce type d'avertissement dans le cadre du
bout de code ci-dessus (avec une longueur que je suppose membre de
la classe).


Si la classe en question n'est pas triviale, elle risque d'évoluer, et
la valeur de "m_MaLongueurDeTableauDoctet" pourrait très bien, un
jour, se retrouver égale à 0, ou supérieure à la taille de
"m_MonTableauDoctets".

Ce code me paraît effectivement incorrect :

- Si on est absolument sûr que la valeur de
"m_MaLongueurDeTableauDoctet" est forcément correcte, il faut
expliquer pourquoi dans un commentaire.

- Un assert() ne serait pas inutile -- ne serait-ce que
assert (m_MaLongueurDeTableauDoctet>0)

- On a deux variables qui me semblent liées : m_MonTableauDoctets et
m_MaLongueurDeTableauDoctet. Elles devraient AMHA être regroupées dans
une classe :

class TableauOctets
{
public:
// l'interface
private:
un_type_quelconque data;
size_t longueur;
};

Ainsi, le nombre réduit de fonctions permettrait de s'assurer que
"longueur" a toujours une valeur correcte.




Avatar
Fabien LE LEZ
On 4 Jul 2006 06:08:47 -0700, "Yannick" :

j'ai bien conscience que ce code n'est pas bon


Je sais. Je répondais à Michel.

Et pour ton information, en français, on écrit de haut en bas.
Cf
http://www.usenet-fr.net/fr.usenet.reponses/usenet/repondre-sur-usenet.html

Avatar
Yannick

On 4 Jul 2006 06:08:47 -0700, "Yannick" :
Et pour ton information, en français, on écrit de haut en bas.
Cf
http://www.usenet-fr.net/fr.usenet.reponses/usenet/repondre-sur-usenet.ht ml


Merci (désolé pour cette impolitesse involontaire).

Yannick.

1 2