Eu tentei usar o Flexelint (a versão unix do PC-Lint) e tive resultados um tanto mistos. Provavelmente porque estou trabalhando em uma base de código muito grande e complicada. Eu recomendo examinar cuidadosamente cada arquivo relatado como não utilizado.
A principal preocupação são os falsos positivos. Várias inclusões do mesmo cabeçalho são relatadas como um cabeçalho desnecessário. Isso é ruim, pois o Flexelint não informa em que linha o cabeçalho está incluído ou onde foi incluído antes.
Uma das maneiras pelas quais as ferramentas automatizadas podem errar:
Em A.hpp:
class A {
// ...
};
Em B.hpp:
#include "A.hpp
class B {
public:
A foo;
};
Em 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
Se você seguir cegamente as mensagens do Flexelint, irá estragar suas #includes dependências. Existem mais casos patológicos, mas basicamente você precisará inspecionar os cabeçalhos para obter melhores resultados.
Eu recomendo este artigo sobre Estrutura Física e C ++ do blog Games de dentro. Eles recomendam uma abordagem abrangente para limpar a bagunça #include:
Diretrizes
Aqui está um conjunto destilado de diretrizes do livro de Lakos que minimizam o número de dependências físicas entre arquivos. Eu os uso há anos e sempre fiquei muito feliz com os resultados.
- Todo arquivo cpp inclui primeiro seu próprio arquivo de cabeçalho. [recorte]
- Um arquivo de cabeçalho deve incluir todos os arquivos de cabeçalho necessários para analisá-lo. [recorte]
- Um arquivo de cabeçalho deve ter o número mínimo necessário de arquivos de cabeçalho necessários para analisá-lo. [recorte]