2014年5月28日水曜日

C99のstdint.hで幅指定した定数リテラル

C99のstdint.hで幅を明示した型は使えるようになったのだが、例えば1Lという定数リテラルの幅は、結局処理系のlongの幅に依存してしまう。なので幅を明示した定数を使いたいときは

((uint64_t) 1)
のようにキャストしていたのだが、stdint.hには定数リテラルを記述するためのマクロがあることを知った。

  • INT8_C(c)
  • INT16_C(c)
  • INT32_C(c)
  • INT64_C(c)
  • INTMAX_C(c)
  • UINT8_C(c)
  • UINT16_C(c)
  • UINT32_C(c)
  • UINT64_C(c)
  • UINTMAX_C(c)

LとかUとかサフィックスを付けたり付けなかったりしているだけのマクロなので、過剰な期待をしてはいけない。

UINT16_C(65536)
とかやっても引数の65536がそのままスルーされるだけで、下位16ビットだけ残して0になったりはしない。

0 件のコメント:

コメントを投稿