ヘッダーのすべてのテキストがコンパイルに含まれますが、以下で説明するように、通常はほとんどまたはまったく効果がありません。
C には「ヘッダー コード」という概念がありません。問題のファイルのコンパイルは、含まれているすべてのファイルの内容が単一のファイルにある場合と同じように扱われます。次に重要なのは、コンテンツがオブジェクトまたは関数を定義しているかどうかです。
ヘッダー ファイル内のほとんどの宣言は (ヘッダー ファイルが一般的に使用されるため) 定義ではなく単なる宣言です。それらはコンパイラに物事を伝えるだけです。オブジェクトやコードが実際に作成されるわけではありません。ほとんどの場合、コンパイラは定義ではない宣言からデータやコードを生成しません。
ヘッダーが外部オブジェクトまたは関数を定義する場合、コンパイラはそれらのデータ (またはスペース) またはコードを生成する必要があります。これらのオブジェクトまたは関数は、後でコンパイルするために他のソース ファイルから参照され、現在のコンパイル。(一部のリンカは、外部オブジェクトまたは関数が使用されていないと判断し、それらを破棄できます。)
ヘッダーが静的オブジェクトまたは関数 (正確には、内部リンケージまたは非リンケージを持つオブジェクト) を定義する場合、コンパイラはこれらのデータまたはコードを生成する場合があります。ただし、オプティマイザーは、これらのオブジェクトと関数が参照されていないことを確認する必要があるため、生成が抑制される場合があります。これは単純な最適化です。複雑なコードやデータ分析を必要とせず、オブジェクトや関数に依存するものがないことを単に観察するだけだからです。
そのため、C 標準は、静的オブジェクトまたは関数に対してデータまたはコードが生成されないことを保証しませんが、最適化が無効にされていない限り、中程度の品質の C 実装であっても回避する必要があります。