6.7.3.1 一般规定
可用类型说明符
- 标准列出的类型说明符包括:
voidcharshortintlongfloatdoublesignedunsigned_BitInt(constant-expression)bool_Complex_Decimal32_Decimal64_Decimal128- 原子类型说明符
- 结构体或联合体说明符
- 枚举说明符
typedef名typeof说明符
约束
除
6.7.10的类型推导情形外,每个声明中的声明说明符、每个成员声明中的说明符-限定符列表、每个类型名中的说明符-限定符列表,都必须至少给出一个类型说明符。允许的组合不是任意拼接,而是标准列出的那几组“等价多重集”。例如:
unsigned与unsigned int等价;long long与signed long long int等价;float _Complex、double _Complex、long double _Complex分别是三种不同复类型。
若实现不支持复类型,就不能使用
_Complex。若实现不支持十进制浮点类型,就不能使用
_Decimal32、_Decimal64、_Decimal128。_BitInt(N)中的N必须是整数常量表达式,并满足:unsigned _BitInt(N)的N >= 1_BitInt(N)的N >= 2N <= BITINT_MAXWIDTH
语义
结构体、联合体、枚举、原子类型和
typeof的细节,分别在6.7.3.2到6.7.3.6讨论。typedef名的规则在6.7.9。其余基本类型的特征在
6.2.5。如果声明说明符里没有类型说明符,那么说明该声明走的是
6.7.10的类型推导机制。这种“未显式写类型”的声明里:
- 限定符和属性说明符会附着到推导得到的类型上;
- 对齐说明符则附着到被声明的对象上。
每一组由逗号分开的等价组合都表示同一类型。
唯一的特殊点是位字段:
int在位字段里究竟等同于signed int还是unsigned int,由实现定义。