Инструменты для поиска неиспользуемых объявлений функций?
Вопрос
Во время рефакторинга старого кода я понял, что конкретный заголовочный файл был полон объявлений функций, давно удаленных из файла .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.
Я слышал хорошие отзывы о ПК-Линт, но я думаю, что это, вероятно, излишне для ваших нужд.