seclan のほえほえルーム

| |

・プログラミング言語 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進数整数をあらわしている。


厳密な幅を持つ整数型に関する定義
定義名説明
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


| |

 

配信

5.32 msec