虽然重构了一些旧的代码,但我意识到,从.cpp文件中删除后,特定的头文件充满了函数的函数声明。有没有人知道可以自动找到(和剥离)这些工具?
答案 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的好消息,但我认为这可能对你的需求有些过分。