ISO C11 标准规定6.2.5 Types
:
有五种标准有符号整数类型,指定为signed char、short int、int、long int 和long long int。
对于每个有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字unsigned指定),它使用相同的存储量(包括符号信息)并具有相同的对齐要求。
但是,该部分没有规定基本类型和修饰符出现的顺序。unsigned
控制部分在标准的后面,在6.7.2 Type specifiers
这里解释:
类型说明符是void
, char
, short
, int
, long
, float
, double
, signed
, unsigned
, _Bool
, _Complex
, <struct-or-union-specifier>
, <enum-specifier>
, 和<typedef-name>
.
在每个声明的声明说明符中,以及每个结构声明和类型名称的说明符-限定符列表中,至少应给出一个类型说明符。每个类型说明符列表应为以下多重集之一(当每个项目有多个多重集时,以逗号分隔);类型说明符可以以任何顺序出现,可能与其他声明说明符混合。
然后它继续列出所有的多重集,例如unsigned long, or unsigned long int
.
但是重要的短语是the type specifiers may occur in any order
,这意味着 所有这些都对该多重集有效:
unsigned long
long unsigned
unsigned long int
unsigned int long
long unsigned int
long int unsigned
int unsigned long
int long unsigned