Я пытаюсь обнаружить неиспользуемые функции в C ++. В данный момент я пытаюсь использовать cppcheck, но я не знаю, возможно ли это или как можно обнаружить функции, которые используются, но только функциями, которые сами не используются.
Вот мой маленький тестовый код:
int bla() {
return 0;
}
int test() {
return bla();
}
int main() {
int a = 0;
int b = 0;
return b;
}
Вот что cppcheck обнаруживает при моих текущих настройках:
$ cppcheck --enable=style,unusedFunction test.cpp
Checking test.cpp...
[test.cpp:10]: (style) Variable 'a' is assigned a value that is never used.
Checking usage of global functions..
[test.cpp:5]: (style) The function 'test' is never used.
Проблема в том, что она не определяет функцию bla как неиспользованную, потому что она вызывается в тесте. Но тест никогда не называется, так и не бла. Я хочу, чтобы все функции, кроме функций, которые используются основной помечены как неиспользуемые.
Знаете ли вы вариант для cppcheck или даже другой инструмент статического анализа кода, который бы обнаружил, что bla не используется?
Ты можешь попробовать CppDepend и его язык запросов CQLinq, вы можете создавать с помощью расширенных запросов CQLinq для фильтрации результатов по своему усмотрению, например, в вашем случае вы можете выполнить этот запрос:
from m in Methods where m.MethodsCallingMe
.Where(a=>!a.SimpleName.Contains(("test"))).Count()>0
select m
Я нашел свое собственное решение с помощью Callcatcher http://www.skynet.ie/~caolan/Packages/callcatcher.html. Это не статический анализ кода, но он работает точно так, как я хочу, чтобы он работал.