C言語では、#include <stdio.h>
と先頭に書くだけで、printf
関数などが使えるようになりますが、なぜ関数が使えるようになるかがわかりません。
ヘッダファイルは「宣言の集まり」なのに、なぜ関数が使えるようになるのでしょうか。printf
関数の実体はどこにあるのでしょうか。
初歩的な質問で申し訳ありません…。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
**「ライブラリ」という形で、あらかじめコンパイル済みのものがコンパイラとともに提供されています。そして、「リンク」**という行程(基本的にはコンパイル後に自動で行われる)で実行モジュールに組み込まれて使えるようになります。一般的なコンパイラはprintf
のような「標準関数」は、特に何もしなくてもリンクするようになっています。もちろん、ユーザーが細かく指定することもできます。
あるいは「動的リンク」という仕組みにより、実行させたときに自動的に必要なライブラリをリンクするという方式もあり、現在はそのケースが多いです。OSと一緒にライブラリモジュールが提供されていて、それを呼び出しています。
投稿2015/12/17 10:36
総合スコア5938
0
ベストアンサー
まずコンパイルでソースからオブジェクトファイルを作ります。
ひとつのソースをコンパイルするとき、他のソースは気にしません。
宣言しか見当たらなかった場合、「そういう物がある」で済ませます。
その次に行うリンクという作業で、オブジェクトファイルやライブラリをまとめます。
オブジェクトファイルを眺めて、宣言だけのものが見つかった場合、
別のオブジェクトファイルやライブラリから探してきます。
printfはどこかにある~.libの中に実装されているはずです。
というわけで
「何故標準ライブラリの関数の宣言を書くだけでそれが使えるようになるか」は、
ざっくり言うと「リンカが気を利かせて上手いことやってくれている。」です。
投稿2015/12/17 10:32
編集2015/12/17 10:35総合スコア13512
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/19 05:25 編集
2015/12/19 07:36
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/17 11:54