Мне пришлось настраивать некоторые проекты, которые были написаны для какой-то другой цели, но некоторые основные функциональные возможности те же для моего проекта и работают как есть. Но есть много переменных, макросов, функций и т. Д., Которые не полезны для моего текущего контекста, и они просто делают код очень неудобным для чтения и излишне большим.
Поэтому я начал удалять макросы функций переменных и т. Д. С помощью «Найти ссылки» и «Показать график вызовов» в Netbeans. Я использую средства удаленной разработки NetBeans для C / C ++.
Но это громоздко. Так есть ли какой-нибудь инструмент для очистки?
Из того, что я знаю, в настоящее время нет ни одного инструмента, который бы делал все, что вы упомянули, однако есть один, который помогает в очистке неиспользуемых заголовков включения: включают в себя что-вы-использование
«Включите то, что вы используете«означает это: для каждого символа (тип, функция
переменная или макрос), который вы используете в foo.cc, либо foo.cc, либо foo.h
должен #include .h файл, который экспортирует объявление этого символа.
Инструмент include-what-you-use — это программа, которая может быть собрана с
библиотеки clang для анализа #include исходных файлов для поиска
Нарушения включают в себя то, что вы используете, и предлагайте исправления для них.Основная цель include-what-you-use — удалить лишние #include. Это делается как путем выяснения того, что на самом деле #include не нужно для этого файла (как для файлов .cc, так и для файлов .h), и
замена #include на форвард-декларирование, когда это возможно.
Можно ожидать, что Clang статический анализатор сделал бы это, но из того, что я вижу доступные проверки не предлагайте такие вещи.
Это может быть хорошее время для кого-то предложить запрос функции в анализатор или создать отдельный инструмент, используя LibTooling по аналогии с инструментами, описанными в Clang Tools
А пока я бы предложил вам включить -стена а также -Wextra флаги компилятора, которые будут вызывать следующие предупреждения (среди прочих) (см. документы GCC ниже):
Если по какой-то причине вы не хотите этого делать, вы можете просто добавить -Wunused который включит только перечисленные выше опции -Wunused, без других флагов, добавленных -Wall или -Wextra.
Но чтобы получить предупреждение о неиспользуемом параметре функции, вы
необходимо либо указать -Wextra -Wunused (обратите внимание, что -Wall подразумевает
-Wunused) или отдельно указать -Wunused-параметр.
Конечно, это означает, что вы должны сделать очистку вручную
Если вы хотите быть более педантичным, вы можете также преобразовать все предупреждения в ошибки, добавив -педантичная-ошибка флаг
Для более подробной информации читайте Документация по параметрам предупреждений GCC.
Я иногда использовал метод маркировки большого блока кода как «неиспользуемый», добавляя
#if 0
... lots of code
#endif
Затем вы можете скомпилировать код и посмотреть, что идет не так. Проанализируйте ошибки «undeclared varibale X», которые вы получите, и восстановите необходимые для этого биты. Вы можете сделать это, «вырезав» #if 0
блок (добавление #endif
тогда новый #if 0
немного ниже), или перемещая нужные вам части из текущего блока.
Например, если у вас есть блок глобальных переменных или макросов, просто введите #if 0
вокруг всех них, и посмотрите, какие из них на самом деле используются. [Хотя макросы могут быть немного сложнее, если они используются в #ifdef
и тому подобное].
Я был бы удивлен, если бы не было никакого инструмента, но в то же время, вам все равно придется выполнять работу по резке, и как только у вас есть большой кусок кода в #if 0 ... #endif
это довольно легко вырезать.
Многие инструменты статического анализа кода предоставляют необходимую информацию. В Википедии есть список.
Мы успешно использовали такой инструмент (с некоторыми пользовательскими изменениями) для удаления включений и ускорения времени компиляции.