C++ 查找未使用函数声明的工具?

C++ 查找未使用函数声明的工具?,c++,function,header,C++,Function,Header,在重构一些旧代码时,我意识到一个特定的头文件中充满了从.cpp文件中删除的函数的函数声明。是否有人知道有一种工具可以自动查找(并剥离)这些功能?如果您使用Doxygen对代码进行索引,您可以从何处查看每个功能的引用。但是,您必须浏览每个类(每个类1个HTML页面),并扫描那些没有任何指向它们的内容 或者,您可以使用ctags生成代码中所有函数的列表,然后使用objdump或类似工具获取.o文件中所有函数的列表,然后比较这些列表。但是,由于名称混乱,这可能是有问题的。我认为不存在这种情况,因为一些

在重构一些旧代码时,我意识到一个特定的头文件中充满了从.cpp文件中删除的函数的函数声明。是否有人知道有一种工具可以自动查找(并剥离)这些功能?

如果您使用Doxygen对代码进行索引,您可以从何处查看每个功能的引用。但是,您必须浏览每个类(每个类1个HTML页面),并扫描那些没有任何指向它们的内容


或者,您可以使用ctags生成代码中所有函数的列表,然后使用objdump或类似工具获取.o文件中所有函数的列表,然后比较这些列表。但是,由于名称混乱,这可能是有问题的。

我认为不存在这种情况,因为一些在实际源代码树中没有主体的函数可能在某些外部库中定义。这只能通过创建一个脚本来完成,该脚本在头中列出声明的函数列表,并验证它们是否有时被调用。

如果可能,您可以创建一个test.cpp文件来调用所有函数,链接器会将没有代码的函数标记为未解析,这样,您的测试代码只需要编译,而不必担心实际运行。

我有一个可以检查和报告不匹配功能的工具——vimmers,ftplugin套件还不容易安装。ftplugin基于ctags结果(因此它可以很容易地适应其他环境),有时在内联函数的情况下会出现误报


HTH,

除了Doxygen(@Milan Babuskov),您还可以查看编译器中是否有关于此的警告。例如,gcc具有静态函数的-Wunused函数-fdump ipa cgraph。

我听说了一些好消息,但我想这可能是为了满足您的需要而做的过度了。

PC线头可以专门用于:

我针对您的问题测试了以下代码:

void foo(int );

int main()
{
    return 0;
}
线头试验 并得到如下结果:

============================================================ --- 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 ============================================================ ============================================================ ---模块:test_unused.cpp(C++) ---模块总结:test_unused.cpp 信息752:未引用本地声明符“foo(int)”(第2行,文件test_unused.cpp) test_unused.cpp(2):信息830:前面消息中引用的位置 ============================================================ 因此,您可以为您的权限传递警告号752:

lint.bat -"e*" +e752 test_unused.cpp 绒线棒-“e*”+e752测试
-e“*”将删除所有警告,+e752将打开此特定警告

,该警告最终将为所编写的每个函数再添加一组警告。此外,如果在这个测试文件中丢失了一个没有任何作用的函数调用,那么在某个时候,几乎不可能知道这一点。我同意,我认为更多的是一次性地测试正在重构的区域。这不是一个长期的解决方案,另一种方法可能是在链接器上使用详细的输出。PC Lint对很多事情都有好处。只要记住关闭所有警告,并根据需要慢慢打开它们。实际上,您只需要大约2打的精选核心就可以改进代码库。学究式的学究作风和过分夸张会让你的代码变得丑陋。 lint.bat -"e*" +e752 test_unused.cpp