[C]コンパイルエラーとリンクエラー
概要
前回、コンパイルとリンクについて説明しました。
今回は、それを元にコンパイルエラーとリンクエラーについて説明します。
コンパイルエラー
コンパイルで行われるのは
1 コードのバイナリ化
2 あるものリスト、欲しいものリストの作成
でした。これでエラーとなるのは以下のような場合です。
1 コードがバイナリ化できない(つまり構文が規則通りでない、など)
2 あるものリストが作れない(つまり関数の宣言がされていない)
です。実は関数の定義はなくてもコンパイルはできます。(エディタが気を利かせてエラーにしてくれる場合も多いですが)
リンクエラー
一方、リンクで行われるのは
1 関数のアドレスの決定
2 関数呼び出しを、その関数コードのアドレスへのジャンプへ置き換え
でした。これがエラーとなるのは、2の置き換えができない場合です。移動先のアドレスが存在しない、つまり関数定義がない場合ですね。
まとめ
関数の定義がないのか、宣言がないのかはどちらのエラーが出ているかで分かりますね。
Comments