プログラミング言語 C の新機能 Part XVIII: INT#5:stdint.h[1/2]
(1999/06/21 [月])
C 言語のプログラムを移植するときの問題点の一つに、typedef された int 型の大きさがあります。例えば、int型 が 32bit と仮定して、int32 という型を typedef して作ったとします。そしてソースプログラム中で int32 という型を使用します。しかし、他の環境へそのソースプログラムを持っていった時には、int が 32bit でないかもしれません。したがって、もしそのままソースプログラムを使用すると 32bit を仮定しているプログラムなのに、実際は 16bit になってしまったということが起こり得ます。そのようなことから環境が変わった場合、新たに定義し直す必要があります。stdint.h はこの問題の一つの解決方法を提示します。
整数を、厳密、最小、演算が速い最小、ポインタ格納可能、最も大きな幅、というクラスにわけ、それをみたす型と限界を定義します。だから、例えば、演算が速い最小の整数型を使えば、他の環境へ持っていってもそのままソースプログラムを再利用することができる可能性が高くなるわけです。
今回は型の定義を示します。次回は各型の限界の定義について述べます。
以降の定義の注意を示す。型は符号ありと符号なしがセットで提供される。片方だけが提供されることはない。N は前に0の付かない符号なし10進数整数をあらわしている。
整数を、厳密、最小、演算が速い最小、ポインタ格納可能、最も大きな幅、というクラスにわけ、それをみたす型と限界を定義します。だから、例えば、演算が速い最小の整数型を使えば、他の環境へ持っていってもそのままソースプログラムを再利用することができる可能性が高くなるわけです。
今回は型の定義を示します。次回は各型の限界の定義について述べます。
以降の定義の注意を示す。型は符号ありと符号なしがセットで提供される。片方だけが提供されることはない。N は前に0の付かない符号なし10進数整数をあらわしている。
定義名 | 説明 |
---|---|
intN_t | 符号付き整数型の typedef 名 |
uintN_t | 符号なし整数型の typedef 名 |
厳密にその幅を持つ整数型。これらの型は任意であるが、もし実装が 8, 16, 32, 64 ビットの整数型を提供しているなら相当する typedef 名を定義する必要がある。 例:N=32の場合:int32_t, uint32_t |
定義名 | 説明 |
---|---|
int_leastN_t | 少なくとも N bit を持つ符号付き整数型の typedef 名 |
uint_leastN_t | 少なくとも N bit を持つ符号なし整数型の typedef 名 |
その幅を持つ最小の整数型。 int_least8_t, int_least16_t, int_least32_t, int_least64_t, uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t は必須である。その他の型は任意である。 |
定義名 | 説明 |
---|---|
int_fastN_t | 少なくとも N bit を持つ最も演算の速い符号付き整数型の typedef 名 |
uint_fastN_t | 少なくとも N bit を持つ最も演算の速い符号なし整数型の typedef 名 |
少なくともその幅を持つ最も演算の速い整数型。これらは、一般的に速いというだけで、すべての目的で最も高速であるということは保証されていない。 int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t は必須である。その他の型は任意である。 |
定義名 | 説明 |
---|---|
intptr_t | ポインタを格納するのに適切な符号付き整数型の typedef 名 |
uintptr_t | ポインタを格納するのに適切な符号なし整数型の typedef 名 |
void* を (u)intptr_t に変換でき、かつそれを void* に戻せ、その結果が元のポインタと等しくできる整数型。これらの型は任意である。 |
定義名 | 説明 |
---|---|
intmax_t | 符号付き整数型の最も大きな幅を持つ符号付き整数型の typedef 名 |
uintmax_t | 符号なし整数型の最も大きな幅を持つ符号なし整数型の typedef 名 |
これらの型は必須である。 |
by seclan