「プレーンな」整数型の実際のサイズはプラットフォームに依存しますが、int32_t
またはのような正確な幅の整数型を使用できますint64_t
。整数型のサイズについて標準が述べていることを少し詳しく説明しましょう (たとえば、このオンライン c 標準ドラフトを参照)。
まず、整数型に関して、標準はコンパイラに基礎となるアーキテクチャを考慮する自由を与えます。
6.2.5 型 (5) ... 「プレーンな」int オブジェクトは、実行環境のアーキテクチャによって提案される自然なサイズ (ヘッダーで定義されている INT_MIN から INT_MAX の範囲の値を含むのに十分な大きさ) を持ちます。
標準では、signed char、short int、int、long int、long long int の 5 つの標準符号付き整数型のそれぞれについて、「最小」サイズのみを指定しています。
5.2.4.2.1 整数型のサイズ (1) 以下の値は、#if 前処理指令で使用するのに適した定数式に置き換えられます。さらに、CHAR_BIT と MB_LEN_MAX を除いて、以下は整数昇格に従って変換された対応する型のオブジェクトである式と同じ型を持つ式に置き換えられます。それらの実装定義の値は、大きさ (絶対値) が、同じ符号で示されているものと等しいか、またはそれ以上でなければなりません。
ただし、標準では正確な幅の整数型も定義されています。
7.20.1.1 正確な幅の整数型
(1) typedef 名 intN_t は、幅 N 、パディング ビットなし、および 2 の補数表現を持つ符号付き整数型を指定します。したがって、int8_t は、正確に 8 ビット幅の符号付き整数型を示します。
(2) typedef 名 uintN_t は、幅 N でパディング ビットのない符号なし整数型を指定します。したがって、uint24_t は、正確に 24 ビット幅の符号なし整数型を示します。
(3) これらのタイプはオプションです。ただし、実装が幅が 8、16、32、または 64 ビットで、パディング ビットがなく、2 の補数表現を持つ (符号付きの型の場合) 整数型を提供する場合、対応する typedef 名を定義する必要があります。
これらの型は「オプション」であると述べていますが、実装が特定のサイズ/動作の整数型を提供する場合、対応する typedef 名を定義する必要があるとも言われています。そのため、コンパイラーが基本整数型に定義された幅を提供しないことを決定する可能性があることを導き出すことができますが、提供する場合、対応する正確な幅の型も利用可能になります。