C言語/標準ライブラリ/stdint.h

出典: フリー教科書『ウィキブックス(Wikibooks)』

ヘッダー <stdint.h> では、指定された幅を持つ整数型の集合を宣言し、それに対応するマクロの集合を定義しています[1]

また、他の標準ヘッダーで定義された型に対応する整数型の限界を指定するマクロも定義しています[1]

型は以下のカテゴリーで定義されています。

  • 特定の正確な幅を持つ整数型。
  • 少なくともある特定の幅を持つ整数型。
  • 少なくともある特定の幅を持つ最速の整数型。
  • オブジェクトへのポインタを保持するのに十分な幅を持つ整数型。
  • 最大の幅を持つ整数型。

(これらの型のいくつかは同じ型を表すことがあります)

対応するマクロは、宣言された型の制限を指定し、適切な定数を構築します。

ここに記述されている各型のうち、実装が提供するものについては、<stdint.h>はそのtypedef名を宣言し、関連するマクロを定義しなければならない。

逆に、ここに記述されている型のうち、実装が提供していないものについては、<stdint.h>はそのtypedef名を宣言せず、関連するマクロを定義してはならない。

実装は、「必須("required")」と記述されている型を提供しなければならないが、「任意("optional"))」と記述されているその他の型を提供する必要はない。

機能テストマクロ __STDC_VERSION_STDINT_H__ は、 yyyymmL というトークンに展開されます。

整数型[編集]

最初のuの有無だけが異なる型名が定義されている場合、それらは§6.2.5 Types に記載されているように対応する符号付き及び符号なしの型を表すものとする。 §6.2.5 Types に記述されているように、対応する符号付きおよび符号なしの型を示す。 これらの対応する型の一方を提供する実装は、他方も提供しなければならない。

以下の記述では、記号 N は、先頭にゼロを持たない符号なしの10進整数を表す(例えば、8や24であり、04や048ではない)。

正確な幅の整数型[編集]

型名 intN_t
幅Nでパディングビットを持たない符号付き整数型を指定します。
したがって、int8_t は正確に 8 ビットの幅を持つこのような符号付き整数型を表します。
型名 uintN_t
幅 N でパディングビットを持たない符号なし整数型を指定します。
したがって、uint24_tは、正確に24ビットの幅を持つ符号なし整数型を示す。

これらの型はオプションです。ただし、8、16、32、64ビットの幅を持ち、パディングビットを持たない整数型を提供する場合は、対応するtypedef名を定義しなければならない。

最小幅の整数型[編集]

型名 int_leastN_t
少なくともN個の幅を持つ符号付き整数型を指定し、それより小さいサイズの符号付き整数型は少なくとも指定された幅を持たないようにします。
したがって、int_least32_tは、少なくとも32ビットの幅を持つ符号付き整数型を示す。
型名 uint_leastN_t
少なくともN個の幅を持つ符号なし整数型を指定し、それより小さいサイズの符号なし整数型が少なくとも指定された幅を持たないようにする。
したがって、uint_least16_tは、少なくとも16ビットの幅を持つ符号なし整数型を示す。
以下の型が「必須("required")」です。
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個の幅を持つ最速の符号付き整数型を指定します。
型名uint_fastN_t
少なくともN個の幅を持つ最速の符号なし整数型を指定します。
以下の型が「必須("required")」です。
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
符号付き整数型で、void への有効なポインタがこの型に変換され、再び void へのポインタに変換され、その結果が元のポインタと同じになるという特性を持つ。
uintptr_t
符号なし整数型で、void への有効なポインタがこの型に変換され、再び void へのポインタに変換され、その結果が元のポインタと同じになるという特性を持つ。
これらの型はオプションです。

最大幅の整数型[編集]

intmax_t
任意の符号付き整数型の任意の値を表すことができる符号付き整数型を指定します。
uintmax_t
任意の符号付き整数型の任意の値を表すことができる符号なし整数型を指定します。
これらの型は「必須("required")」です。

指定幅の整数型の幅[編集]

以下のオブジェクト型マクロは、<stdint.h>で宣言された型の幅を指定します。各マクロ 名前は#整数型と同様の型名に対応しています。

定義されたマクロの各インスタンスは、#if 前処理ディレクティブで使用するのに適した定数式で置き換えられなければならない。その実装定義値は、以下に示す値と同等以上でなければならない。 ただし、正確に指定された値であると述べられている場合を除く。実装では、実際に提供する 型名に対応するマクロのみを定義しなければならない。

正確な幅の整数型の幅[編集]

INTN_WIDTH
正確にN
UINTN_WIDTH
正確にN

最小幅の整数型の幅[編集]

INT_LEASTN_WIDTH
正確にUINT_LEASTN_WIDTH
UINT_LEASTN_WIDTH
N

最小幅の最速整数型の幅[編集]

INT_FASTN_WIDTH
正確にはUINT_FASTN_WIDTH
UINT_FASTN_WIDTH
N

オブジェクトポインタを保持できる整数型の幅[編集]

INTPTR_WIDTH
正確にはUINTPTR_WIDTH
UINTPTR_WIDTH ; 16

最大の幅を持つ整数型の幅[編集]

INTMAX_WIDTH
正確にはUINTMAX_WIDTH
UINTMAX_WIDTH
64

その他の整数型の幅[編集]

PTRDIFF_WIDTH
ptrdiff_t の幅
SIG_ATOMIC_WIDTH
sig_atomic_t の幅
SIZE_WIDTH
size_t の幅
WCHAR_WIDTH 8
wchar_t の幅
WINT_WIDTH
wint_t の幅

整数定数用マクロ[編集]

最小幅の整数定数用マクロ[編集]

マクロINTN_C(value)
int_leastN_t型に対応する整数定数式に展開されます。
マクロUINTN_C(value)
uint_leastN_t型に対応する整数の定数表現に展開されます。

例えば、uint_least64_tがunsigned long long int型の名前である場合、UINT64_C(0x123)は整数定数0x123ULLに展開されます。

最大幅の整数定数のマクロ[編集]

INTMAX_C(値)
引数で指定された値とintmax_t型を持つ整数定数式に展開します。
UINTMAX_C(値)
次のマクロは、引数で指定された値とuintmax_t型の整数定数式に展開します。

整数型の最大値と最小値[編集]

幅を表す接尾辞_WIDTHを持つマクロが存在するすべての整数型に対して、接尾辞_MAXを持つ最大値マクロと、すべての符号型に対して接尾辞_MINを持つ最小値マクロは、以下のように定義されます。 § 5.2.4.2. Characteristics of integer types <limits.h> で定義されています。符号付きか符号なしかの指定がなく、実装上、符号なしの型となっている場合は、接尾辞_MIN の最小マクロと、対応する型の値 0 が定義される。

脚註[編集]

  1. ^ 1.0 1.1 N2596 working draft — December 11, 2020 ISO/IEC 9899:202x (E). ISO/IEC JTC1/SC22/WG14. p. 261, §7.20 Integer types <stdint.h>. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf. 

参考文献[編集]