3.1 で見た型指定子と 3.2 で見た宣言子を組み合わせると,扱えるデータは,つぎの「型(type)」に分類されます[C11 §6.2.5]。
オブジェクト型 Object Type | スカラ型 Scalar Type | 算術型 Arithmetic Type | 実数型 Real Type | 整数型 Integer Type | 標準整数型 Standard Integer Type | 符号付き Standard Signed Integer Type | signed char (short int )int (long int )long long (long long int ) |
符号無し Standard Unsigned Integer Type | _Bool | ||||||
拡張整数型 Extended Integer Type | 符号付き | Implementation Defined | |||||
符号なし | |||||||
列挙型(Enumerated Type) | |||||||
浮動小数点型 Floating Type | float | ||||||
複素数型 Complex Type | float _Complex | ||||||
ポインタ型(Pointer Type) | |||||||
集成体型 Aggregate Type | 配列型(Array Type) | ||||||
構造体型(Structure Type) | |||||||
関数型(Function Type) |
[ノート]
(1) 標準符号付き整数型と拡張符号付き整数型をまとめて「符号付き整数型(Signed Integer Type)」と呼びます[C11 §6.2.5, 4]。
(2) 同様に,標準符号無し整数型と拡張符号無し整数型をまとめて「符号無し整数型(Unsigned Integer Type)」と呼びます[C11 §6.2.5, 6]。
(3) 「複素数型」のサポートは,処理系に任されています[C11 §6.2.5, 11]。
(4) char
,signed char
,unsigned char
で「文字型(Character Type)」を構成します[C11 §6.2.5, 15]。
(5) 上記表内の「ポインタ型」「配列型」「構造体型」「関数型」と,上記表に掲載していない「共用体型(Union Type)」と「アトミック型(Atomic Type)」の6つが「派生型(Derived Type)」を構成します[C11 §6.2.5, 20]。「派生型」とは,「オブジェクト型」と「関数型」から派生する型であり,「関数型」自体が「派生型」である理由は,返却値の型とパラメータの型によって特徴付けられるためで,「返却値の型より派生する」と考えます。
(6) 「アトミック型」のサポートは,処理系に任されています[C11 §6.2.5, 20]。
オブジェクト型は,コンパイル(翻訳)段階において,確保するメモリ領域の大きさ「サイズ(size)」の確定有無によって,つぎに分類されます。
void
char str[];
など
後に見る演算子には,「スカラ型」に使えるものもあれば,「算術型」や「実数型」,さらには「整数型」に限定されたものもあります。演算子の利用制限にあたっては,上記表を確認すると良いでしょう。