質問: C言語では、`#include `と先頭に書くだけで、`printf`関数などが使えるようになりますが、なぜ関数が使えるようになるかがわかりません。 ヘッダファイルは「宣言の集まり」なのに、なぜ関数が使えるようになるのでしょうか。`printf`関数の実体はどこにあるのでしょうか。 初歩的な質問で申し訳ありません...。 よろしくお願いします。
回答: まずコンパイルでソースからオブジェクトファイルを作ります。 ひとつのソースをコンパイルするとき、他のソースは気にしません。 宣言しか見当たらなかった場合、「そういう物がある」で済ませます。 その次に行うリンクという作業で、オブジェクトファイルやライブラリをまとめます。 オブジェクトファイルを眺めて、宣言だけのものが見つかった場合、 別のオブジェクトファイルやライブラリから探してきます。 printfはどこかにある~.libの中に実装されているはずです。 というわけで 「何故標準ライブラリの関数の宣言を書くだけでそれが使えるようになるか」は、 ざっくり言うと「リンカが気を利かせて上手いことやってくれている。」です。 参考:#includeとリンクの違いはなんでしょうか