Ich habe versucht, Flexelint (die Unix-Version von PC-Lint) zu verwenden, und hatte etwas gemischte Ergebnisse. Dies liegt wahrscheinlich daran, dass ich an einer sehr großen und knotigen Codebasis arbeite. Ich empfehle, jede Datei, die als nicht verwendet gemeldet wird, sorgfältig zu prüfen.
Die Hauptsorge sind Fehlalarme. Mehrere Includes desselben Headers werden als nicht benötigter Header gemeldet. Dies ist schlecht, da Flexelint Ihnen nicht sagt, in welcher Zeile der Header enthalten ist oder wo er zuvor enthalten war.
Eine der Möglichkeiten, wie automatisierte Tools dies falsch machen können:
In A.hpp:
class A {
// ...
};
In B.hpp:
#include "A.hpp
class B {
public:
A foo;
};
In 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
Wenn Sie den Nachrichten von Flexelint blind folgen, werden Sie Ihre # include-Abhängigkeiten durcheinander bringen. Es gibt mehr pathologische Fälle, aber im Grunde müssen Sie die Header selbst überprüfen, um die besten Ergebnisse zu erzielen.
Ich empfehle diesen Artikel über Physical Structure und C ++ aus dem Blog Games from inside. Sie empfehlen einen umfassenden Ansatz zur Bereinigung des # include-Chaos:
Richtlinien
Hier ist eine Reihe von Richtlinien aus Lakos 'Buch, die die Anzahl der physischen Abhängigkeiten zwischen Dateien minimieren. Ich benutze sie seit Jahren und war immer sehr zufrieden mit den Ergebnissen.
- Jede CPP-Datei enthält zuerst eine eigene Header-Datei. [snip]
- Eine Header-Datei muss alle Header-Dateien enthalten, die zum Parsen erforderlich sind. [snip]
- Eine Header-Datei sollte die Mindestanzahl an Header-Dateien enthalten, die zum Parsen erforderlich sind. [snip]