C で複数のファイルを含む大きなプロジェクトに取り組んでいると仮定すると.c
、単一のヘッダー ファイルではなく複数のヘッダー ファイルを使用することを好む理由はありますか?
そして別の質問:
header.h
、main.c
およびの 3 つのファイルがあるとしother.c
ます。ファイルでのみ定義および使用される
という名前の関数があります。関数プロトタイプをヘッダー ファイルまたはファイルに配置する必要がありますか?func()
other.c
other.c
C で複数のファイルを含む大きなプロジェクトに取り組んでいると仮定すると.c
、単一のヘッダー ファイルではなく複数のヘッダー ファイルを使用することを好む理由はありますか?
そして別の質問:
header.h
、main.c
およびの 3 つのファイルがあるとしother.c
ます。ファイルでのみ定義および使用される
という名前の関数があります。関数プロトタイプをヘッダー ファイルまたはファイルに配置する必要がありますか?func()
other.c
other.c
複数のヘッダーと単一のヘッダー。
複数のヘッダーを使用する主な理由は、一部のコードが残りの部分とは独立して使用できる可能性があり、そのコードにはおそらく独自のヘッダーが必要であるためです。極端な場合、サービスを提供する各ソース ファイル (またはソース ファイルの小さなグループ) には、サービスへのインターフェイスを定義する独自のヘッダーが必要です。
また、ヘッダーには、モジュールを使用するために必要な情報 (関数宣言と関数宣言で必要な型宣言) が含まれることにも注意してください (グローバル変数はありませんよね?)。ヘッダーには、モジュールの実装にのみ必要なヘッダーを含めないでください。モジュールの実装にのみ必要な型を定義するべきではありません。モジュールの正式なインターフェースの一部ではない関数 (モジュールによって内部的に使用される関数) を定義するべきではありません。
できるモジュール内のすべての関数は、するstatic
必要がありますstatic
。
現在のプロジェクトには、すべて、またはほとんど、または個別のヘッダーを含む omnibus ヘッダーがまだあるかもしれませんが、ヘッダーをモジュールへのインターフェイスを定義するものと考えると、ほとんどのコンシューマー モジュールはそれについて知る必要がないことがわかります。すべての可能なプロバイダー モジュール。
この機能func()
は でのみ使用されるため、でのみ表示されるother.c
ように機能を作成する必要があります。他のファイルが関数を使用しない限り、ヘッダーに入れるべきではありません。その時点で、ヘッダーに入れることが重要です。static
other.c
これらの他の質問で役立つ情報を見つけることができます。間違いなく、他にも役立つ質問がたくさんあります。
一般に、モジュールごとに、懸念/読みやすさ/再利用性を明確に分離するためのインターフェイスを記述するヘッダー ファイルがあります。
other.c の関数がローカルの場合、ヘッダー ファイルに含める必要はありません。