Инструменты для поиска неиспользуемых объявлений функций?

StackOverflow https://stackoverflow.com/questions/100221

  •  01-07-2019
  •  | 
  •  

Вопрос

Во время рефакторинга старого кода я понял, что конкретный заголовочный файл был полон объявлений функций, давно удаленных из файла .cpp.Кто-нибудь знает инструмент, который мог бы найти (и удалить) их автоматически?

Это было полезно?

Решение

Если возможно, вы могли бы создать файл test.cpp для вызова их всех, компоновщик пометит те, у которых нет кода, как неразрешенные, таким образом, ваш тестовый код нужно будет только скомпилировать и не беспокоиться о фактическом запуске.

Другие советы

PC-lint можно настроить для конкретных целей:

Я протестировал следующий код для вашего вопроса:

void foo(int );

int main()
{
    return 0;
}
lint.bat test_unused.cpp

и получил следующий результат:

============================================================

--- Module:   test_unused.cpp (C++)

    --- Wrap-up for Module: test_unused.cpp

Info 752: local declarator 'foo(int)' (line 2, file test_unused.cpp) not referenced
test_unused.cpp(2) : Info 830: Location cited in prior message

============================================================

Таким образом, вы можете передать номер предупреждения 752 для своей цели:

lint.bat  -"e*"  +e752  test_unused.cpp

-e"*" удалит все предупреждения, а +e752 включит это конкретное.

Если вы проиндексируете код с помощью Doxygen, вы увидите, откуда ссылается каждая функция.Однако вам придется просмотреть каждый класс (по 1 HTML-странице на каждый класс) и найти те, на которые ничего не указывает.

В качестве альтернативы вы можете использовать ctags для создания списка всех функций в коде, а затем использовать objdump или какой-либо аналогичный инструмент, чтобы получить список всех функций в файлах .o, а затем сравнить эти списки.Однако это может быть проблематично из-за искажения имен.

Я не думаю, что такое существует, потому что некоторые функции, не имеющие тела в реальном дереве исходного кода, могут быть определены в какой-то внешней библиотеке.Это можно сделать только путем создания скрипта, который составляет список объявленных функций в заголовке и проверяет, вызываются ли они иногда.

у меня есть C++ ftplugin для vim он может проверять и сообщать о непревзойденных функциях - ребята, пакет ftplugin пока не так-то просто установить.Плагин ftplugin основан на результатах ctags (отсюда и его эвристика можно легко адаптировать к другим средам), иногда в случае встроенных функций возникают ложные срабатывания.

ХТХ,

Помимо Doxygen (@Milan Babuskov), вы можете посмотреть, есть ли предупреждения об этом в вашем компиляторе.Например.gcc имеет -Wunused-function для статических функций;-fdump-ipa-cgraph.

Я слышал хорошие отзывы о ПК-Линт, но я думаю, что это, вероятно, излишне для ваших нужд.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top