之间是否有任何Linux/Windows的一种工具,它将使我们能够确定是否在C特定功能的逻辑是一样的,在一个特定的功能C++?工具来确定的相似逻辑的C函数和C++
回答
一般来说,图灵机的等价为undecidable,所以没有。
这个问题在一般情况下是不可能的,并不能证明一个有用的工具(即可以获得简单案例的工具)是不可能的。 – dmckee 2010-06-26 20:48:07
事实上,dmckee指出,代码的AST匹配给出了答案的近似值,至少对于复制粘贴的代码。 – 2010-06-28 15:52:11
我觉得有这样一个工具,叫做装配上市。
如果您只是谈论控制结构,if/else,代码块,swtich/case,while等等,并且如果您愿意能够接受“gettign一个很好的感觉”,宁可比100%准确,然后一张图片可能工作千言万语,你可能会看一个代码流程图程序。
我不会推荐任何东西,因为我不太了解它们(但是一直都想尝试它们,特别是如果是往返旅行的话,可能不容易找到一些免费的东西。看到这样的事情...... alt text http://www.ezprog.com/wp-content/uploads/flowchart.gif
是,你有什么想法?难道它C和C++版本中,你可以得到一个粗略的感受逻辑的相似性。
也许你能告诉我们多一点你在寻找什么?帮助我们来帮助你?谢谢。
比“查看流程图”更复杂的方法是构造程序依赖图(带/不带静态单赋值)并尝试图匹配。本文使用这个想法来查找代码克隆:Jens Krinke:用程序依赖关系图识别类似代码。 WCRE 2001:301-309好消息是它在一定程度上有效;坏消息是它不能扩展到真正的大系统。更可伸缩的方法使用了词汇标记或AST匹配的匹配。 – 2010-06-29 01:06:44
你可以想像一个工具,比较STRU在编译器完成初始转换为抽象表示或经过一次或多次优化之后,编译器将执行AST。
这可能
- 错过一些真正的匹配(即产生假阴性)
- 找出一些虚假的比赛(即产生误报)
有了调整,你可以强制第二种情况更普遍。我不知道如何将它作为vgrep流程的前端有用。
但它变得更糟,因为你已经要求跨语言实施,并且将使它更难。尽管如此,gcc对所有东西都使用相同的抽象表示,所以它不会超出想象。
这么说,我知道没有这样的工具。
有一个工具,确实*这*。它被称为CloneDR(http://www.semanticdesigns.com/Products/Clone)这比较了源代码的AST以验证“相似性”。 CloneDR处理包括C和C++在内的许多语言您几乎不需要跨语言实现; C通常足够接近被C++解析器所吞噬,并且更容易对C代码进行轻微更改,而不是创建这样的跨语言工具。 – 2010-06-28 15:50:42
@Ira:谢谢......哇!该网站提出了一些非常强烈的主张。有人知道它在现实生活中有多好? – dmckee 2010-06-28 15:58:43
我是作者。我认为它工作得很好。你必须形成你自己的意见。您可以下载评估版来这样做。 – 2010-06-28 19:30:44
- 1. 具有类似逻辑的函数的时间差异
- 2. C#逻辑不会工作
- 3. C#和多线程逻辑
- 4. 逻辑&&在C
- 5. 逻辑版本A或C(C和B)
- 6. SQL逻辑:查找具有相似行的非重复项
- 7. C++ - 具有相同名称的函数
- 8. 检查素数 - C#逻辑
- 9. PHP定义函数逻辑
- 10. C中的丑陋数字的逻辑
- 11. C风格的逻辑和重构
- 12. 在C中是逻辑和(&&)的简写?
- 13. 表和SQL逻辑的ASP.NET C#问题
- 14. Vala GUI和C++中的逻辑
- 15. C++中的逻辑删除和删除[]
- 16. 逻辑:是(A &&!(B || C))|| (B || C)与(A || B || C)相同?
- 17. 保持C#和JS同步实现的相同逻辑
- 18. C中的按位逻辑
- 19. C++ if else逻辑错误和不正确的输出
- 20. C#winforms:我的GUI和逻辑分离是否正确完成?
- 21. 具有boost :: noncopyable的C++工厂函数
- 22. C# - 优化逻辑
- 23. 帮助C++逻辑?
- 24. C++逻辑问题
- 25. C#逻辑冲突
- 26. C++逻辑错误
- 27. C++逻辑问题
- 28. C++:调度逻辑
- 29. c编程逻辑
- 30. C#递归逻辑
“逻辑学”在什么意义?相同的控制结构? – 2010-06-26 15:57:26
考虑到C中的addElement()使用特定的逻辑在链表的开头添加了一个元素。因此,该工具应该能够确定/识别C++中的特定函数是否也使用相同的逻辑王来在链表的开始处添加元素。 – 2010-06-26 16:01:32
男:所以你正在寻找一个流程图发生器?在C和C++中实现这个的不同方法呢?见弗雷德的答案如下。 – 2010-06-26 16:03:41