Обычно при написании нового кода вы обнаруживаете, что вам не хватает #include, потому что файл не компилируется. Достаточно просто, вы добавляете требуемый #include. Но позже вы как-то реорганизуете код, и теперь пара директив #include больше не нужна. Как узнать, какие из них больше не нужны?
Конечно, я могу вручную удалить некоторые или все строки #include и добавить их, пока файл снова не скомпилируется, но это невозможно в большом проекте с тысячами файлов. Есть ли в наличии инструменты, которые помогут автоматизировать задачу?





Для этого вы можете использовать ПК-Линт / FlexeLint.
Как ни странно, бесплатной версии инструмента для ОС нет.
Вы можете удалить #includes, передавая по ссылке вместо передачи по значению и прямого объявления. Это связано с тем, что компилятору не нужно знать размер объекта во время компиляции. Однако это потребует от вас большого объема ручной работы. Хорошо, что это сократит время компиляции.
Я не смог найти никакой документации по линту, в которой говорилось бы, что это возможно. У тебя есть указатель?
К сожалению, мне тоже не удалось найти его в свободном доступе. У меня есть лицензия PC-Lint, и я могу поручиться, что она там есть. Возможно, вам стоит связаться с Gimpel напрямую? Они могут прислать вам отрывок из руководства.
+ e766 // Включение заголовочного файла FileName не используется в модуле String
Вы можете просто написать инструмент командной строки «грубой силы», который комментирует #includes один за другим и проверяет, работает ли компиляция. Дай мне знать, когда он заработает. ; 0)
Эта статья объясняет технику удаления #include с помощью синтаксического анализа Doxygen. Это просто Perl-скрипт, поэтому пользоваться им довольно просто.
Существует подключаемый модуль Eclipse под названием Includator, который помогает управлять зависимостями включения в проектах C / C++.
Вот макрос VC6 'грубой силы', который работает с одним файлом .cpp или .час, открытым в редакторе, комментируя include путем включения и запуска компиляции:
Sub RemoveNotUsedIncludes()
'Check if already processed; Exit if so
ActiveDocument.Selection.FindText "//INCLUDE NOT USED", dsMatchFromStart
IF ActiveDocument.Selection <> "" THEN
ActiveDocument.Selection.SetBookmark
MsgBox "Already checked"
ActiveDocument.Selection.ClearBookmark
EXIT SUB
END IF
'Find first #include; Exit if not found
ActiveDocument.Selection.FindText "#include", dsMatchFromStart
IF ActiveDocument.Selection = "" THEN
MsgBox "No #include found"
EXIT SUB
END IF
Dim FirstIncludeLine
FirstIncludeLine = ActiveDocument.Selection.CurrentLine
FOR i=1 TO 200
'Test build
ActiveDocument.Selection.SetBookmark
ActiveDocument.Selection = "//CHECKING... #include"
Build
ActiveDocument.Undo
ActiveDocument.Selection.ClearBookmark
IF Errors = 0 THEN
'If build failed add comment
ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection = " //INCLUDE NOT USED"
END IF
'Find next include
ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection.FindText "#include"
'If all includes tested exit
IF ActiveDocument.Selection.CurrentLine = FirstIncludeLine THEN EXIT FOR
NEXT
Конец подписки
Конечно, его можно улучшить для работы над всем проектом.
Это еще один вопрос, имеющий прямое отношение к этому: stackoverflow.com/questions/74326/….