私たちのアプリケーションのソース コードは、数十万行、数千のファイルで構成されており、場所によっては非常に古いものになっています。このアプリケーションは 1995 年か 1996 年に最初に作成されたものです。ここ数年で、私のチームはソースの品質を大幅に改善しましたが、特に私を悩ませている問題が 1 つあります。多くのクラスには、ヘッダー ファイルで完全に定義された多くのメソッドがあります。
場合によっては、ヘッダーでインラインで宣言されたメソッドに問題はありません-構造体のコンストラクター、インライン化によりかなり高速になる単純なメソッド(このような数学関数がいくつかあります)など。しかし、インライン化されたメソッドの自由な使用は明らかではありません理由は次のとおりです。
- 混雑
- メソッドの実装を見つけるのが難しくなります (特に、仮想関数のクラスのツリーを検索すると、ヘッダーでバージョンが宣言されているクラスが 1 つだけ見つかります...)
- おそらくコンパイルされたコードのサイズが増加します
- おそらく、大規模なコードベースでは不安定であることで有名なリンカに問題が発生します。公平を期すために、ここ数年でかなり良くなりましたが、完璧ではありません。
この最後の理由が問題を引き起こしている可能性があり、コードベースを調べてほとんどの定義をソース ファイルに移動するのは十分な理由です。
私たちのコードベースは巨大です。 これを (ほとんど) 実行できる自動化ツールはありますか?
ノート:
- Embarcadero RAD Studio 2010 を使用しています。つまり、C++ の方言にはVCL やその他の拡張機能などが含まれています。
- スタンドアロンのヘッダーもいくつかありますが、ほとんどのヘッダーは通常どおり、対応する .cpp ファイルとペアになっています。拡張子を除けば、ファイル名は同じです。つまり、Xh で定義されたメソッドがある場合は、それらを X.cpp に移動できます。これは、ツールがプロジェクト全体の解析を処理する必要がないことも意味します。本体が定義されたメソッドを確実に認識できる限り、おそらく .cpp/.h ファイルの個々のペアを解析し、インクルードを無視することができます。クラス宣言でそれを移動します。