ではc
、ファイルに名前を付ける必要はまったくありません。そのため、ヘッダー mylongheadername.h
を呼び出しながら、ソース ファイルを呼び出して、a.c
その中に という関数を含めることができますjustArandomFunctionName
。
ただし、ソース ファイルにはヘッダー ファイルを含める必要があることに注意してください。通常、ヘッダーとソース ファイルの間には強い関連性があるため、ほぼ常にこの方法で行われます。ただし、以下は完全に有効です。
a.c : func1 implementation
func2 implementation
b.c : func3 implementation
func4 implementation
c.h : func1 declaration
func3 declaration
d.h : func2 declaration
func4 declaration
ただし、この方法には、このように設定されたファイルを使用するときに発生する可能性のある問題がいくつかあります (つまり、これらのファイルを正しく構造化するために余分な作業を行う必要があります)。ただし、ヘッダー ファイルの使用方法は単なる慣例であり、言語によって強制されるものはほとんどありません。
次に、関数が定義されている場所をヘッダー ファイルが認識していない場合、これがどのように機能するかという問題があります。これの考え方は、知る必要がないということです。
基本的に、ヘッダーが行うことは、特定のプロファイル (名前、パラメーター、戻り値の型) に適合する関数をどこかで定義したことをコンパイラに伝えることだけです。コンパイラがこれを読み取ると、基本的には、このすべての情報を派手な名前に混ぜて、呼び出しているファイルに挿入するだけです。つまり、何もしません。次に実行する必要がある手順は、リンカーを使用して、各ファイルのコンパイル済みバージョンを単一の実行可能ファイルに変換することです。これは多くのことを行いますが、最も重要なことの 1 つは、コンパイラが作成した凝った名前をすべて解決することです。ただし、リンカーがこれを行う方法は、ファイルのすべてのコンパイル済みバージョンを読み取り、関数の定義を他のコードの実際の場所に一致させることです。