Я спробував використовувати Flexelint (unix версія PC-Lint) і мав дещо неоднозначні результати. Це, ймовірно, тому, що я працюю над дуже великою і вузловою базою коду. Я рекомендую уважно вивчити кожен файл, який повідомляється як невикористаний.
Основна стурбованість - помилкові позитиви. Про кілька заголовків одного заголовка повідомляється як непотрібний заголовок. Це погано, оскільки Flexelint не повідомляє вам, у який рядок включений заголовок або де він був включений раніше.
Один із способів автоматизованих інструментів може помилитися з цим:
В A.hpp:
class A {
// ...
};
В B.hpp:
#include "A.hpp
class B {
public:
A foo;
};
У 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
Якщо ви сліпо слідкуєте за повідомленнями Flexelint, ви примрусите свої залежності #include. Існує більше патологічних випадків, але в основному вам потрібно буде самостійно оглянути заголовки для найкращих результатів.
Настійно рекомендую цю статтю про фізичну структуру та C ++ з блогу Ігри зсередини. Вони рекомендують комплексний підхід до очищення безладу #include:
Керівні принципи
Ось дистильований набір вказівок із книги Лакоса, який мінімізує кількість фізичних залежностей між файлами. Я використовую їх протягом багатьох років і завжди був дуже задоволений результатами.
- Кожен файл cpp спочатку включає власний файл заголовка. [сніп]
- Файл заголовка повинен містити всі файли заголовка, необхідні для його розбору. [сніп]
- Файл заголовка повинен мати мінімальну кількість файлів заголовка, необхідних для його розбору. [сніп]