C言語:externの型間違いは検出してくれない-あたり前だが・・・

 グローバル変数をuint_16で宣言していた。それを異なるファイルでextern intで参照してしまった。32ビットマイコンなので、intは32ビットである。当然、おかしなことになる。
今までこの手の間違いはやったことはない。externで参照する時には、必ずもとの宣言をコピーして使っていたからだ。ところが、今回に限ってなぜかこんなことをしてしまった。
 半日ほど無駄にして、なんでコンパイラが検出してくれないんだ、と思ったのだが、コンパイラで検出できるはずはない。ファイルをまたがる変数はリンカの仕事だからだ。でも、リンカの仕事は、基本はアドレスの解決である。この手のミスのエラーメッセージを期待するのは間違っている。C言語は、本当にやっかいである。

コメントを残す

メールアドレスが公開されることはありません。