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