ちょっと違うと思うんですよねぇ。
最新のコンパイラだと挙動を変更可能かもしれませんが、リンクするしないは翻訳単位つまりモジュール単位で判定すると思います。
func_a,func_b,func_cがimpl.cにあるとして、リンク対象のどこからも3つの関数が参照されないとき、impl.objがリンクされないことはあると思います。
関数1個ずつリンクされないという動作は標準的ではないと思います。
当て推量を含みますが、関数1個ずつでリンクする/しないをリンカが判定するなら、翻訳単位なんかいらないわけで、objファイル的な中間ファイルも不要ですよね。中間ファイルがなんのためにあるか少し考えたらこの微妙な問題にすぐ気づくと思うのですが・・・
いろんなところで、怪しげな説明をしているのを目にします。
# 私の説明もそういう類のひとつかもしれませんが。
テストプロジェクトをつくり、リンクオプションを確認しながら数回ビルドしてみればすぐに分かることだと思います。
プログラムを書くということは、実行環境だけでなく処理系についてもかなりの部分を把握していなければならないと思うのですが・・・
# 今把握していなくても、把握しようとする姿勢のほうが重要かも。
コメント