大規模なコードベースでコードの分離を改善するために、さまざまな C ライブラリを構築しています。
最小限のパブリック ライブラリ インターフェイスを使用して厳密に分離したいと考えています。
ライブラリは複数のモジュール (c + h ファイル) で構成されており、内部参照を含むものもあります。
現在、ライブラリ ヘッダー ファイルには、ライブラリ インターフェイス関数に関連するプロトタイプと、ライブラリ内 (ライブラリ モジュール間) で使用されるパブリック関数の両方が含まれています。
ライブラリインターフェース(ライブラリモジュール間で使用される内部パブリック関数)を介してアクセスできないパブリックインターフェースを何らかの方法で除外したいと思います。
私は次の可能な解決策を考え出しましたが、これらのいずれかが最適であるとは確信していません。
- モジュールごとに 2 つのヘッダー ファイルを維持します。ライブラリ内で使用される内部インターフェイスを含む 1 つのヘッダー ファイルと、ライブラリのユーザーが使用できる公開ライブラリ インターフェイスを含む 1 つのヘッダー ファイル
- インクルード ガード + ac プリプロセッサを使用して、ヘッダー ファイルのセクションを除外します。結果として、前処理されたヘッダー ファイルにはライブラリのパブリック関数のみが含まれます。
- // Lib func \n void function1 ( int test ); などの C スタイルのコメントを使用して、いくつかの構文に基づいてヘッダー ファイルをフィルター処理するカスタム スクリプトを記述します。このソリューションでは、標準ツールを使用して c ヘッダー ファイル (clang / LibClang など) を解析します。
これは、ライブラリを構築する際の標準的な「問題」であると思いますが、なぜ SOF や Google でこのトピックに関する情報が見つからないのか疑問に思っています。
これを効果的に達成する方法についての提案は高く評価されます。
ありがとう