コンパイラとリンカ(CS+の不親切) | 不機嫌な技術

不機嫌な技術

プロを脅かすアマチュアになりたい。

テーマ:
月曜の深夜に何やってんだって感じですが、

CS+のお話。

main.c に加えて、test.c があるとき

test.c内で宣言されている関数をmain.c内でプロトタイプ宣言無しに呼ぶとどうなるか。

呼べます。エラー出ません。

今までこの仕組をあまり気にしてませんでしたが、

どうも、CS+では(RXのコンパイラでは?)、

「プロトタイプ宣言のない関数は関数型、引数ともにint型とみなす」

みたいなことが起きているようです。

つまり、多分ですが、float型なんかを使った関数は大抵おかしくなるんじゃないかと。

charとかshortとかビット長せまいものはどうなるんでしょう、ちょっとそこまで考えてません。


結論から言うと、プロトタイプ宣言しろよバカって話なんですが、いや、だって、

無くても通ったし、忘れたらあれだし、とかあると思うので設定探してみました。

CC-RXのビルドツールのプロパティで、コンパイラオプションのタブを開きます。

「インフォメーション、ウォ-ニングメッセージをエラーレベルに変更する」

「はい(エラー番号指定)」
にして、
「インフォメーション、ウォーニングレベルのエラー番号」

「23077」
にします。

下図参照。


こうすると、一番下に出ているようにプロトタイプ宣言がないとエラー出ます。

バッチリですね。多分。

これで、関数呼ぶと意図した動作をしない、とか、mainに書くと動くのに関数化すると動かない、
とか、そういうバグというかミスを減らすことができますね。

たぶんわたし、過去、なんどかこれにハマって、

「ハマり続けた結果、関数化を諦める」

ということをやっている気がします。 くそう。