キャストの罠

通常Cでのプログラムといえば、Visual C++などでPCのアプリケーションを作成することを想像するでしょう。 これからCに入った人も多いはずです。これらのコンパイラでは自動キャスト(型変換)は当たり前です。
int a = 3;
float b = 4;
int c = 100.0f*(a/b); //aは自動的にfloatに変換されて計算され、右辺計算後に自動的にintに変換されてcに代入される。結果は75
しかし、マイコンのコンパイラは必ずしも自動キャストしてくれません。 平気でオーバーフローします。(上のcは0になる) どのコンパイラがどの程度まで自動キャストするかなどということを調べるなどというのは無駄な努力です。 この際、「マイコンプログラムにおいては必ず明示的にキャストする」習慣をつけましょう。 多少面倒でも、
int a = 3;
float b = 4;
int c = (int)(100.0f*((float)a/b));
とします。

Top