ビット幅が固定の型

Cの仕様では組み込み型(int, short, longなど)のビット幅は決まっていません。環境によってint型のビット幅が32だったり16だったり8だったりします。ですが、マイコンのプログラムをPCに移植する場合などはこれでは困ります。そのため移植性を考えた場合はそれらの型を使う代わりにstdint.hでtypedefされている型を使うべきです。


以下に主要なものを示します。

ビット幅 符号 型名 AVRの場合
8 uint8_t unsigned char
8 int8_t signed char
16 uint16_t unsigned int
16 int16_t signed int
32 uint32_t unsigned long int
32 int32_t signed long int
64 uint64_t unsigned long long int
64 int64_t signed long long int

このほかにも少なくともN bit幅の型であるint_leastN_tや、少なくともN bitの幅を持つ最も演算の速い型であるint_fastN_tという型もtypedefされています。(符号なしの場合は先頭にuをつける)

ただしこれらの型はC99で追加された規格なので一部のコンパイラでは対応していないかもしれません。gccの場合は、-std=c99もしくは-std=gnu99というオプションをつけるとうまくいきます。

by Shiozaki

参考:

avr-libc: <stdint.h>: Standard Integer Types

3 Comments so far

  1. t-semi on 3月 6th, 2010

    ご参考までに
    これらの定義はC99から導入されました。ANSI CやC89のみ準拠のコンパイラではそもそもstdint.hがないかもしれません。by Y.O

  2. Y.O on 3月 13th, 2010

    そいえば前回突っ込み忘れましたがintが8bitはさすがにC言語規約違反です。gccのオプションで指定はできますけどね。

    参考: http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/AVR-Options.html#AVR-Options

  3. [...] C言語の言語仕様ではビット幅が固定の型にあるように型のサイズが決められていません。浮動小数点型においてもこれは例外ではなく、floatとdoubleも必ず4バイト、8バイトではありませ [...]

Leave a reply