我正在尝试检测 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 函数未使用,因为它是在 test 中调用的。但 test 永远不会被调用,所以 bla 也不会被调用。我希望除了 main 使用的函数之外的所有函数都被标记为未使用。
你知道 cppcheck 的选项吗?
您可以尝试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。这不是静态代码分析,但它完全按照我想要的方式工作。
这里有完整的注释和描述的 CQLinq 查询,用于查找潜在的死方法。还有查找此类变量和字段的规则: https://www.ndepend.com/default-rules/NDepend-Rules-Explorer.html?ruleid=ND1701#!