あなたのintは何バイト?

C言語におけるint型というのは何バイトなのでしょうか?

int i;

C言語におけるint型というのは、言語上のサイズ規定はありません。そのCPUにおけるもっとも扱いやすいサイズがint型ということになります。

size-of-int
int型のサイズのイメージ

最近はARM大全盛。32bitなのが当たり前、なんなら64bitも当たり前な時代になってきましたが、それでもやっぱり安いMCUは8bitだったり16bitだったりもします。古いソースコードを流用して新しいシステムに移植するという場合もあるでしょう。古いコードにはコードを最適化する工夫が含まれているかもしれません。

unsigned int i;
int a[256];
while(1){
    a[i++] = ADC_read();
}

本当にあるかどうかはわかりませんが、int型が8bitであることを前提としてこういうコードが書かれていることがあるかもしれません。もしこれを32bitなシステムで実行すると、どんどんメモリを破壊していくことになります。

こんな状況だと移植性が悪いので、stdint.h や独自の#defineなどで、ビット幅を固定したコードを書くことになります。

uint8_t i;

こうすればかならず8bitになります。

コメント