性格悪い人が優勝

https://oshiete.goo.ne.jp/qa/12563031.html
のNo.5の回答を解説して頂けないでしょうか? 例えば、a.c と b.c というふたつのソースコードを書いたとします。a.c には
b.c に含まれる func() という関数を呼び出しているとします。
a.c と b.c をコンパイルしオブジェクト a.obj と b.obj をコード生成した状態では a.obj 内では func() が存在するのかどうかまだわかっていません。a.obj と b.obj をリンク処理し実行可能ファイルを生成した時点で、はじめて func() の呼び出し元と呼び出し先がリンクされてアドレス(セグメント内のオフセット)が決まります。
で、
a.cとb.cに含まれるfunc()という関数を呼び出しているのに、それをコンパイルするとなぜ、func()が存在するのかどうかがなぜ分からないのでしょうか?教えていただけると幸いです。すみません。

A 回答 (1件)

> a.cとb.cに含まれるfunc()という関数



オブジェクトモジュールの段階では、a.objにはfunc()がありません。
ないものを呼び出そうとしているのです。だからオブジェクトモジュールは実行不可能です。
次の(普通はリンカが行う)段階でb.objにしか書かれていないfunc()もa側から使える様に組み込んだものが実行可能ファイル(ロードモジュール)となります。
    • good
    • 0
この回答へのお礼

ないものを呼び出そうとしているとはどういう事でしょうか?教えていただけると幸いです。すみません。つまり、コード生成の場面では、a.cとb.cをコンパイルしただけの場面という事でしょうか?

お礼日時:2021/09/16 08:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!