J'ai essayé d'utiliser Flexelint (la version unix de PC-Lint) et j'ai obtenu des résultats quelque peu mitigés. C'est probablement parce que je travaille sur une base de code très large et noueuse. Je recommande d'examiner attentivement chaque fichier qui est signalé comme inutilisé.
Le principal souci est celui des faux positifs. Les inclusions multiples du même en-tête sont signalées comme un en-tête non nécessaire. C'est mauvais puisque Flexelint ne vous dit pas sur quelle ligne l'en-tête est inclus ou où il a été inclus auparavant.
Les outils automatisés peuvent notamment se tromper :
Dans A.hpp :
class A {
// ...
};
Dans B.hpp :
#include "A.hpp
class B {
public:
A foo;
};
En C.cpp :
#include "C.hpp"
#include "B.hpp" // <-- Unneeded, but lint reports it as needed
#include "A.hpp" // <-- Needed, but lint reports it as unneeded
Si vous suivez aveuglément les messages de Flexelint, vous allez gâcher vos dépendances #include. Il existe des cas plus pathologiques, mais en gros, vous devrez inspecter les en-têtes vous-même pour obtenir les meilleurs résultats.
Je recommande vivement cet article sur Structure physique et C++ du blog Jeux de l'intérieur. Ils recommandent une approche globale pour nettoyer le désordre #include :
Directives
Voici un ensemble de directives distillées du livre de Lakos qui minimisent le nombre de dépendances physiques entre les fichiers. Je les utilise depuis des années et j'ai toujours été très satisfait des résultats.
- Chaque fichier cpp comprend d'abord son propre fichier d'en-tête. [snip]
- Un fichier d'en-tête doit inclure tous les fichiers d'en-tête nécessaires à son analyse. [snip]
- Un fichier d'en-tête doit avoir le nombre minimum de fichiers d'en-tête nécessaires à son analyse. [snip]
2 votes
Voir aussi : stackoverflow.com/questions/74326/
2 votes
La question liée ne semble aborder le problème que sous Windows, en utilisant Visual Studio en particulier.
8 votes
Je vote pour rouvrir cette question, car le doublon concerne l'utilisation de Visual Studio, spécifiquement.