Intenté usar Flexelint (la versión unix de PC-Lint) y obtuve resultados algo mixtos. Esto es probable porque estoy trabajando en una base de código muy grande y nudosa. Recomiendo examinar cuidadosamente cada archivo que se informa como no utilizado.
La principal preocupación son los falsos positivos. Múltiples inclusiones del mismo encabezado se informan como un encabezado innecesario. Esto es malo ya que Flexelint no le dice en qué línea se incluye el encabezado o dónde se incluyó antes.
Una de las formas en que las herramientas automatizadas pueden equivocarse:
En A.hpp:
class A {
// ...
};
En 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 sigue ciegamente los mensajes de Flexelint, acumulará sus # dependencias incluidas. Hay más casos patológicos, pero básicamente necesitará inspeccionar los encabezados usted mismo para obtener mejores resultados.
Recomiendo este artículo sobre Estructura física y C ++ del blog Juegos desde dentro. Recomiendan un enfoque integral para limpiar el desorden #include:
Pautas
Aquí hay un conjunto de pautas destiladas del libro de Lakos que minimizan la cantidad de dependencias físicas entre archivos. Los he estado usando durante años y siempre he estado muy contento con los resultados.
- Cada archivo cpp incluye su propio archivo de encabezado primero. [recorte]
- Un archivo de encabezado debe incluir todos los archivos de encabezado necesarios para analizarlo. [recorte]
- Un archivo de encabezado debe tener el número mínimo de archivos de encabezado necesarios para analizarlo. [recorte]