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

时间:2008-09-19 07:22:07

标签: c++ function header

虽然重构了一些旧的代码,但我意识到,从.cpp文件中删除后,特定的头文件充满了函数的函数声明。有没有人知道可以自动找到(和剥离)这些工具?

7 个答案:

答案 0 :(得分:2)

如果可能的话,你可以创建一个test.cpp文件来调用它们,链接器会标记那些没有代码未解析的文件,这样你的测试代码只需要编译而不用担心实际运行。

答案 1 :(得分:2)

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将打开此特定警告

答案 2 :(得分:0)

如果您使用Doxygen索引代码,您可以看到每个函数的引用位置。但是,您必须浏览每个类(每个类1个HTML页面)并扫描那些没有指向它们的内容。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我有C++ ftplugin for vim能够检查和报告无法匹配的功能 - vimmers,ftplugin套件还不是很容易安装。 ftplugin基于ctags结果(因此其heuristic可以很容易地适应其他环境),有时内联函数会出现误报。

HTH,

答案 5 :(得分:0)

另外Doxygen(@Milan Babuskov),您可以看到编译器中是否有此警告。例如。 gcc具有-Wunused-function用于静态函数; -fdump-IPA-cgraph。

答案 6 :(得分:0)

我听说过有关PC-Lint的好消息,但我认为这可能对你的需求有些过分。