6

テキストの代わりに AST を使用して 2 つの C++ ファイルを比較できる無料の diff ユーティリティはありますか?

私が考えていたのは次のようなものです:

  • 両方のファイルを AST に変換します
  • AST を C++ コードとしてレンダリングします (これにより、インデントが正規化されます)。
  • これら2つの間の通常の差分を実行します
  • また、行われた単純なリファクタリングを検出してみてください (たとえば、メンバーの追加/削除/名前変更)。
4

4 に答える 4

4

[他の回答者の 1 人から商用ツールの名前を投稿するよう依頼されました。]

Semantic Designs の SmartDifferencer ツールは C++ を解析し、AST に基づいて差異を計算します。レイアウトの書式設定は重要ではありません。パーサーは完全な C++11 パーサーです。「構造化」されている限り、ほとんどのプリプロセッサ ディレクティブを展開することなく、ほとんどのソース ファイルを解析できます。C++ プリプロセッサの使用は、通常、C ほど乱暴ではありません。

他の言語用のバージョンの SmartDifferencer があります。

[情報開示: 私は Semantic Designs の CTO です]

于 2013-01-10T15:28:10.063 に答える
2

あなたの問題に対する2つの代替解決策を考えることができます:

  1. グループで使用するコーディング スタイルについて話し合い、それを守ります。チーム メンバーのさまざまな個人的なコーディング スタイルの間で妥協点を見つける必要がある場合があります。

  2. ソース管理を使用している場合は、コミット時にすべてのフォーマットを削除し、チェックアウト時にコードのフォーマットをカスタマイズするフックを追加します。これには多少の手間がかかりますが、チーム メンバーは独自の書式設定スタイルを使用できます。もちろん、これは変数の命名やその他の非フォーマット コード スタイル要素における意見の相違を解決するものではありません。

于 2013-01-09T19:21:30.587 に答える
1

AStyle を介してコードを渡して、差分を実行する前にインデント/間隔/フォーマットを正規化できます。これはリファクタリングには何もしませんが、正直なところ、これを適切に行うには完全な前処理/コンパイル パスが必要です。

http://astyle.sourceforge.net/

于 2013-01-09T19:13:12.647 に答える