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

有帮助吗?

解决方案

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

其他提示

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

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

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

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

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

哈特哈,

另外Doxygen (@Milan Babuskov),你可以看看你的编译器中是否有这样的警告。例如。gcc 有用于静态函数的 -Wunused-function ;-fdump-ipa-cgraph。

我听说过一些好消息 PC-Lint, ,但我想这对于您的需求来说可能有点过分了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top