支持c++的Diff实用程序

Diff utility that is C++ aware

本文关键字:实用程序 Diff c++ 支持      更新时间:2023-10-16

是否有一个免费的diff实用程序可以使用它们的ast而不是文本来比较两个c++文件?

我想的是:

  • 将两个文件转换为AST
  • 将AST还原为c++代码(这将缩进规范化)
  • 在这两个之间做正常差
  • 也尝试检测所做的简单重构(例如添加/删除/重命名成员)

[另一位答题者要求张贴商业工具的名称]

Semantic Designs的SmartDifferencer工具将解析c++,并基于ast计算差异;布局格式并不重要。解析器是一个完整的c++ 11解析器。它可以解析大多数源文件,而无需扩展大多数预处理器指令,只要它们是"结构化的";c++预处理器的使用通常不像C中那样滥用。

有其他语言版本的SmartDifferencer。

[披露:我是Semantic Designs的CTO]

对于你的问题,我可以想到两种解决方案:

  1. 讨论将作为一个组使用的编码风格并坚持它。您可能需要在团队成员不同的个人编码风格之间找到折衷方案。

  2. 如果你正在使用源代码管理,添加钩子,在提交时删除所有格式,并在签出时自定义代码格式。这需要一些工作,但允许团队成员使用自己的格式风格。当然,这并不能解决变量命名和其他非格式化代码样式元素的不同意见。

有像MOSS (http://theory.stanford.edu/~aiken/moss/)这样的工具可能会有所帮助。

你可以在做diff之前通过style传递代码来规范缩进/空格/格式化。这对重构没有任何帮助,但老实说,你需要一个完整的预处理/编译传递来正确地完成这一点。

http://astyle.sourceforge.net/