我想自动将重复或类似的C代码移动到函数中。
这必须在Linux下运行。
答案 0 :(得分:4)
问题的一个子集:检测重复代码:
尝试:PMD
重复的代码很难找到,特别是在大型项目中。但是PMD的复制/粘贴检测器(CPD)可以为您找到它! CPD经历了三个主要的变化:
- 首先我们使用Michael Wise的Greedy String Tiling算法的变体编写它(我们的变体在这里描述)
- 然后它被Brian Ewins使用Burrows-Wheeler变换完全重写
- 最后,Steve Hawkins重写了它使用Karp-Rabin字符串匹配算法。
...
请注意,CPD适用于Java,JSP,C,C ++,Fortran和PHP代码。
答案 1 :(得分:1)
您需要查看 Simian 。它对于非商业项目是免费的。尝试类似:
# Find all C source files and identify similarities/duplicate code.
simian -includes=**/*.c -excludes=**/*_test.c
答案 2 :(得分:1)
答案 3 :(得分:1)
请注意,您不能只比较文字行。您必须以这种方式解析代码,您还可以检测语义正确但可能具有不同命名标识符的段。
例如,给定两个等效但使用不同标识符的函数,文本搜索不会将它们视为相同,但解析器可以。
另请注意,即使给出语法,编写C ++解析器也不是一项简单的任务。我建议别人的建议并为此寻找工具。还搜索重构工具。
答案 4 :(得分:1)
请参阅CloneDR,这是一种在源代码中查找精确复制和近似遗漏(复制粘贴编辑)克隆的工具。它使用完整的语言解析器使其能够根据语言结构查找克隆,最大限度地减少误报,并完全忽略代码的评论或格式化,从而最大限度地提高真实检测能力。当克隆块更改了变量,插入状态或代码块时,CloneDR将查找克隆。
它具有C,C ++,COBOL,C#,Java,PHP和许多其他语言的语言前端。
您可以在网站上查看样本克隆检测报告。
答案 5 :(得分:0)
https://github.com/hudayou/fib
在文件或目录中查找相同代码块的工具。