Инструменты для поиска неиспользуемых объявлений функций? - PullRequest
3 голосов
/ 19 сентября 2008

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

Ответы [ 7 ]

2 голосов
/ 19 сентября 2008

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

2 голосов
/ 15 марта 2009

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 для своего puropse:

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

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

0 голосов
/ 19 сентября 2008

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

0 голосов
/ 19 сентября 2008

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

0 голосов
/ 19 сентября 2008

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

НТН,

0 голосов
/ 19 сентября 2008

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

0 голосов
/ 19 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...